# NOT RUN {
data(Langren1644)
####################################################
# reproductions of Langren's graph overlaid on a map
####################################################
if (require(jpeg, quietly=TRUE)) {
gimage <- readJPEG(system.file("images", "google-toledo-rome3.jpg", package="HistData"))
# NB: dimensions from readJPEG are y, x, colors
gdim <- dim(gimage)[1:2]
ylim <- c(1,gdim[1])
xlim <- c(1,gdim[2])
op <- par(bty="n", xaxt="n", yaxt="n", mar=c(2, 1, 1, 1) + 0.1)
# NB: necessary to scale the plot to the pixel coordinates, and use asp=1
plot(xlim, ylim, xlim=xlim, ylim=ylim, type="n", ann=FALSE, asp=1 )
rasterImage(gimage, 1, 1, gdim[2], gdim[1])
# pixel coordinates of Toledo and Rome in the image, measured from the bottom left corner
toledo.map <- c(131, 59)
rome.map <- c(506, 119)
# confirm locations of Toledo and Rome
points(rbind(toledo.map, rome.map), cex=2)
text(131, 95, "Toledo", cex=1.5)
text(506, 104, "Roma", cex=1.5)
# set a scale for translation of lat,long to pixel x,y
scale <- data.frame(x=c(131, 856), y=c(52,52))
rownames(scale)=c(0,30)
# translate from degrees longitude to pixels
xlate <- function(x) {
131+x*726/30
}
# draw an axis
lines(scale)
ticks <- xlate(seq(0,30,5))
segments(ticks, 52, ticks, 45)
text(ticks, 40, seq(0,30,5))
text(xlate(8), 17, "Grados de la Longitud", cex=1.7)
# label the observations with the names
points(x=xlate(Langren1644$Longitude), y=rep(57, nrow(Langren1644)),
pch=25, col="blue", bg="blue")
text(x=xlate(Langren1644$Longitude), y=rep(57, nrow(Langren1644)),
labels=Langren1644$Name, srt=90, adj=c(-.1, .5), cex=0.8)
par(op)
}
### Original implementation using ReadImages, now deprecated & shortly to be removed
# }
# NOT RUN {
if (require(ReadImages)) {
gimage <- read.jpeg(system.file("images", "google-toledo-rome3.jpg", package="HistData"))
plot(gimage)
# pixel coordinates of Toledo and Rome in the image, measured from the bottom left corner
toledo.map <- c(130, 59)
rome.map <- c(505, 119)
# confirm locations of Toledo and Rome
points(rbind(toledo.map, rome.map), cex=2)
# set a scale for translation of lat,long to pixel x,y
scale <- data.frame(x=c(130, 856), y=c(52,52))
rownames(scale)=c(0,30)
lines(scale)
xlate <- function(x) {
130+x*726/30
}
points(x=xlate(Langren1644$Longitude), y=rep(57, nrow(Langren1644)),
pch=25, col="blue")
text(x=xlate(Langren1644$Longitude), y=rep(57, nrow(Langren1644)),
labels=Langren1644$Name, srt=90, adj=c(0, 0.5), cex=0.8)
}
# }
# NOT RUN {
### First attempt using ggplot2; temporarily abandonned.
# }
# NOT RUN {
require(maps)
require(ggplot2)
require(reshape)
require(plyr)
require(scales)
# set latitude to that of Toledo
Langren1644$Latitude <- 39.68
# x/long y/lat
bbox <- c( 38.186, -9.184,
43.692, 28.674 )
bbox <- matrix(bbox, 2, 2, byrow=TRUE)
borders <- as.data.frame(map("world", plot = FALSE,
xlim = expand_range(bbox[,2], 0.2),
ylim = expand_range(bbox[,1], 0.2))[c("x", "y")])
data(world.cities)
# get actual locations of Toledo & Rome
cities <- subset(world.cities,
name %in% c("Rome", "Toledo") & country.etc %in% c("Spain", "Italy"))
colnames(cities)[4:5]<-c("Latitude", "Longitude")
mplot <- ggplot(Langren1644, aes(Longitude, Latitude) ) +
geom_path(aes(x, y), borders, colour = "grey60") +
geom_point(y = 40) +
geom_text(aes(label = Name), y = 40.1, angle = 90, hjust = 0, size = 3)
mplot <- mplot +
geom_segment(aes(x=-4.03, y=40, xend=30, yend=40))
mplot <- mplot +
geom_point(data = cities, colour = "red", size = 2) +
geom_text(data=cities, aes(label=name), color="red", size=3, vjust=-0.5) +
coord_cartesian(xlim=bbox[,2], ylim=bbox[,1])
# make the plot have approximately aspect ratio = 1
windows(width=10, height=2)
mplot
# }
# NOT RUN {
###########################################
# show variation in estimates across graphs
###########################################
library(lattice)
graph <- paste(Langren.all$Author, Langren.all$Year)
dotplot(Name ~ Longitude, data=Langren.all)
dotplot( as.factor(Year) ~ Longitude, data=Langren.all, groups=Name, type="o")
dotplot(Name ~ Longitude|graph, data=Langren.all, groups=graph)
# why the gap?
gap.mod <- glm(Gap ~ Year + Source + Latitude, family=binomial, data=Langren1644)
anova(gap.mod, test="Chisq")
# }
Run the code above in your browser using DataLab