我有一个SpatialPointsDataFrame类的对象,它看起来像:
coordinates div score
1 (-86.2905, 32.7131) 1 0.73
2 (-113.17, 34.4462) 2 3.00
3 (-112.769, 35.1567) 4 0.94
4 (-113.193, 33.9167) 5 4.09
5 (-113.265, 34.407) 1 1.50
6 (-113.585, 34.8241) 2 5.98
7 (-113.793, 34.7597) 3 2.55
8 (-113.651, 35.1733) 2 3.21
9 (-113.675, 35.3431) 4 2.83
10 (-113.09, 34.4036) 5 6.07
11 (-114.172, 34.6878) 1 4.56
12 (-120.153, 37.3049) 3 7.00
我想要的是为每个"div"
类别(仅为5个)生成一个地图,其中颜色与score
列不同(从0到7不等)。
我的主要问题是: 如何在不同的地图中使用相同的颜色比例,以便我可以比较它们?
我认为spplot
函数可能完全符合我的要求,但我无法理解这个函数的参数是如何工作的。如果这是函数,那么我还有另一个问题,如何绘制点后面的大陆边界? (我正在使用R中已有的wrld_simpl
数据
答案 0 :(得分:3)
这是ggplot的一个例子:
library(ggplot2)
library(maps)
df$div <- paste("DIV#", df$div)
ggplot(data=df, aes(x=lon, y=lat)) +
geom_polygon(
data=map_data("state"),
aes(x=long, y=lat, group = group),
colour="white", fill="grey10"
) +
geom_point(aes(color=score), size=3) +
facet_wrap(~ div) +
coord_cartesian(xlim=c(-125, -85), ylim=c(30, 42)) +
scale_colour_gradient2(
low="red", mid="yellow", high="green", midpoint=mean(df$score)
)
我只是快速地将色标放在一起,但是图之间是一致的。注意我创建了自己的data.frame
,其中包含单独的lat lon列。
答案 1 :(得分:1)
使用spplot()
,您需要使用cuts=
和col.regions=
参数,如下所示:
library(sp)
library(gridExtra) ## For grid.arrange()
## Example data
data(meuse)
coordinates(meuse) <- ~x+y
range(meuse$copper) ## Examine range of values to be plotted
# [1] 14 128
## Establish intervals and colors to be applied to them
cuts <- 20*(0:7)
cols <- blues9[3:9]
## Show that it works by creating two plots with different data ranges
## but same color scale
a <- spplot(subset(meuse, copper>40), "copper", cuts=cuts, col.regions=cols)
b <- spplot(subset(meuse, copper<40), "copper", cuts=cuts, col.regions=cols)
gridExtra::grid.arrange(a, b, ncol=2)