带有图例范围和颜色分布的spplot问题

时间:2016-12-04 17:30:32

标签: r spatial shapefile sp maptools

我的情节和图例上的颜色范围正确。

这是我使用的代码:

data.ch4 <- read.csv2("v42_CH4_1970_TOT.txt",skip = 3,stringsAsFactors = FALSE, header = F)
num_data <- data.frame(data.matrix(data.ch4))

library(maptools)
library(lattice)
library(png)

#map loading
map1 <- readShapePoly("CNTR_2014_03M_SH/Data/CNTR_RG_03M_2014.shp")
coordinates(num_data) <- ~V2+V1  
gridded(num_data) <- TRUE

#plotting
png(file="Map2.png",width=35,height=30,unit="cm", res=200, type = "cairo")

spplot(num_data["V3"], xlim=c(-5,35), ylim=c(35,70),
             sp.layout = list("sp.polygons",map1),contour=F)
dev.off()

以下是包含数据的文件:https://www.sendspace.com/file/hjtatp(压缩后通常它的重量为57 mb)

here映射(但地图具有次要优先权,可以跳过)

这是没有任何比例修改的样子: enter image description here

所以一切都是蓝色的。显然,从最小值到最大值存在大规模距离。我想修复这个标尺,例如最后一个值将是“高于x”。我试着这样做:

enter image description here

所以现在看起来好多了。我就这样做了:

#Fixed breakpoints (?)
at <- c(0e+0, 1.5e-5, 1.0e-4, 1.0e-3, 1.0e-2, 1.0e-1, 1.0e+0, 2.0e+0, 1.0e+1, 1.0e+2, 2.0e+2,5.0e+2)

spplot(num_data["V3"], xlim=c(-5,35), ylim=c(35,70),
             sp.layout = list("sp.polygons",map1),
             contour=F,
             at=at) #right there

所以我手动添加了at值(但不是准确的比例)。一切看起来都好多了,但是......

如您所见,右侧的比例不均匀分布。我看不到任何蓝紫色,只有橙色和黄色。

地图上的一些斑点也是亮黄色(德国地区),因为这里的值最高,但遗憾的是在刻度上没有这样的颜色。

可能我做得不好。我不知道如何将比例设置为好看。我希望有这样的比例:

enter image description here

我通过添加:

实现了这一目标
spplot(num_data["V3"], xlim=c(-5,35), ylim=c(35,70),
             sp.layout = list("sp.polygons",map1),
             contour=F,at=at,
             colorkey=list(at=seq(0, 400, 30))  #right there 
             )

但同样,这只是假规模,它不会起作用。

第二个快速问题:如何在spplotted数据之上添加国家轮廓?因为现在的轮廓被彩色数据所掩盖:c

1 个答案:

答案 0 :(得分:5)

转换为因子的数据会为图例定期提供间隔。您可以按colorkey = list(labels = list(at = ..., labels = ...))更改标签及其位置。

[Edited; (I noticed that some values are over 500, sorry)]

 ## convert numeric to factor
num_data@data$cutV3 <- cut(num_data@data$V3, breaks = c(at, Inf))   # I modified the breaks

spplot(num_data["cutV3"], xlim=c(-5, 35), ylim=c(35, 70), 
   colorkey = list(height = 1, labels = list(at = seq(0.5, length(at) -0.5), labels = at)),
   sp.layout = list("sp.polygons", map1, first = F), contour = F)  # drawn after main plot

enter image description here