我正在尝试将图像叠加到世界地图上。这可能是代码
require(reshape)
require(mapdata)
df <- read.table('year.dat',head=F)
names(df) <- c("value", "x", "y", "t")
dfc <- cast(df[ ,-4], x ~ y)
filled.contour(as.matrix(dfc),color.palette = colorRampPalette(c("lightblue", "blue","violet", "black")),
xlab = "Longitude (°)", ylab = "Latitude (°)",
xlim = c(0, 360), ylim = c(-90, 90),
nlevels = 25,
plot.axes = {axis(1); axis(2);
map('world2Hires',
xlim = c(0, 360),
ylim = c(-90, 90),
add = T, col = "darkgrey")}
)
文件“year.dat”中包含的数据的格式为
0.35217720 1 201 1
0.26413283 1 209 1
1.1665874 1 210 1
...
0.30815500 2 194 1
0.15407741 2 196 1
0.15407741 2 197 1
0.33016610 2 205 1
...
其中第一列是标量值,第二列是经度索引,第三列是纬度索引,第四列是时间索引。一行
0.35217720 1 1 1
表示在时间1,在坐标-90°N,0°E中,我们得到值0.35217720。整个格子包含480x241点。 问题如下,如果我尝试在R中执行前面的代码,世界地图和条形图例都会被淹没但没有颜色叠加。如果我评论该行
#xlim = c(0, 360), ylim = c(-90, 90),
然后绘制好的彩色图像,但不存在世界地图。所以我在xlim和ylim中尝试了不同的限制,实际上问题是输入矩阵的规模。即R为两个轴的输入范围从0到1,实际上它们从0到360和0到180.我可以告诉R输入标度从0到360为x轴,从0到180对于y轴?
答案 0 :(得分:0)
解决方案是:
require(reshape)
require(mapdata)
require(mapproj)
df <- read.table('year.dat',head=F)
names(df) <- c("value", "x", "y", "t")
dfc <- cast(df[ ,-4], x ~ y)
mm<-as.matrix(dfc,ncol=480,nrow=241)
#pdf('mappamondo.pdf')
filled.contour(x=seq(0,360,length.out=480),y=seq(-90,90,length.out=241),mm,color.palette = colorRampPalette(c("lightblue", "blue","violet", "black")),
xlab = "Longitude (°)", ylab = "Latitude (°)",
plot.axes = {axis(1); axis(2);
map('world2Hires',
xlim = c(0, 360),
ylim = c(-90, 90),
add = T, col = "black")}
)
#dev.off()