重新缩放等高线图和mapdata

时间:2012-08-04 10:01:36

标签: r

我正在尝试将图像叠加到世界地图上。这可能是代码

   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轴?

1 个答案:

答案 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()