R spplot标签重叠

时间:2015-07-14 22:11:00

标签: r label

我正在处理的数据对于每个级别(东南5州的每日降雨量)有很多相同的值,例如:

values(r1) <- c(rep(0.1,25575),rep(0.2,25575),rep(0.3,25575),rep(0.3,25575)) 

因此在输出图像中,地图上每个级别都有相同的标签/值,有没有一种方法,每个级别只有标签只显示一次或两次,例如:标签0.1只显示1级,不是25575次?

这是一个测试代码:

library(sp)
library(rgdal)
library(raster)
library(maptools)
setwd("C:/Users/rosaR/Data/PRISM")

r1 <- raster(xmn=-88.77083, xmx=-75.02083, ymn=24.0625,ymx=36.97917, nrow=310, ncol=330,crs='+proj=longlat +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0') 
#values(r1) <- c(rep(0.1,25575),rep(0.2,25575),rep(0.3,25575),rep(0.4,25575))   
values(r1) <- c(rep(seq(from=0.1,to=3,by=0.1),3410))
newproj <- "+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"
r1 <- projectRaster(r1, crs=newproj)

png(file=paste("test.png",sep=""), width=1350, height=700, units="px")
at=c(0,0.15,0.3,0.45,0.5,0.65,0.7,0.85,0.9,1.05,1.1,1.25,1.3,1.45,1.5,1.65,1.7,1.85,1.9,2.05,2.1,2.25,2.3,2.45,2.5,2.65,2.7,2.85,2.9,3)

spplot(r1,
#sp.layout=list(
#list('sp.polygons', spTransform(SE_sea1, CRS(newproj)),fill="white", first=F, col=NA), 
#list('sp.polygons', spTransform(SE1, CRS(newproj)), alpha=1, lwd=2, first=F)),
xlim=c(613190.6,2173441),ylim=c(121319.4,1774699),col.regions=rainbow(29),colorkey=F,at=at+.Machine$double.eps,contour=T,labels=list(labels=format(at)),col=grey.colors(1),maxpixels=102300)    
dev.off()

如果我在= c(0,0.15,0.25,0.35,0.5)设置中断,地图看起来会很完美,但由于我的原始数据集很大,并且不可避免地存在与级别值相同的值,可能不是多达25575,但20-100倍,我想减少到不到5倍的图像显示。

我尝试添加:1)method =&#34; flattest&#34 ;; 2)list(&#39; sp.pointLabel&#39;,r1,label,col =&#39; grey&#39;); 3)list(&#34; sp.text&#34;,coordinates(raster_data),raster_data);但似乎没有一个对我的RasterLayer有效,

任何建议都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在.Machine$double.eps值中添加at,以便截止值只会忽略at值。然后,您可以使用labels参数来调整显示的标签(因此您得到&#34; 0.1&#34;而不是&#34; 0.100000e + 02&#34;)

labels的{​​{1}}参数传递给spplotlevelplot表示?sp传递给...(网格,多边形)或levelplot(分),但xyplot是&#34;网格&#34; -type)。阅读raster说要查看?levelplot以获取有关?panel.levelplot参数的更多详细信息。最后,labels表示?panel.levelplot可以是包含元素&#34;标签&#34;的列表。描述要放在轮廓上的标签。

结果是你的代码除了:

  • 调整labels以添加at(一个小数字)
  • 调整.Machine$double.eps以使标签为&#34; nice&#34;号。

,并提供:

label

enter image description here

(颜色看起来很糟糕,但我想你可以从这里解决它:P)