【问题标题】:R: Making common legend and colour scheme for multiple shapefilesR:为多个 shapefile 制作通用图例和配色方案
【发布时间】:2018-05-29 20:16:29
【问题描述】:

先来个样本数据:

library(raster)
# download a sample shape file
shape.file <- getData('GADM', country='FRA', level=2)

ID_2 <- rep(shape.file@data$ID_2,times=2)
group.id <- rep(c(100,200),each=96)

set.seed(1)
cat1<- runif(192,min=0,max=100)
set.seed(2)
cat2<- runif(192,min=0,max=100)
set.seed(3)
cat3<- runif(192,min=0,max=100)

dat <- as.data.frame(cbind(ID_2,group.id,cat1,cat2,cat3))

# extract the data for group.id = 100 and group.id = 200 in two seprate df

group.id.100 <- dat[dat$group.id==100,]
group.id.200 <- dat[dat$group.id==200,]

# merge with shape file

merge.shp.100 <- merge(shape.file,group.id.100, by="ID_2") 
merge.shp.200 <- merge(shape.file,group.id.200, by="ID_2") 

# plot them together 
par(mfrow=c(3,2))

plot(merge.shp.100,col=merge.shp$cat1,main="Group.id.100,cat1")
plot(merge.shp.100,col=merge.shp$cat2,main="Group.id.100,cat2")
plot(merge.shp.100,col=merge.shp$cat3,main="Group.id.100,cat3")

plot(merge.shp.200,col=merge.shp$cat1,main="Group.id.200,cat1")
plot(merge.shp.200,col=merge.shp$cat2,main="Group.id.200,cat2")
plot(merge.shp.200,col=merge.shp$cat3,main="Group.id.200,cat3")

我想为所有 6 个图形插入一个通用图例和配色方案。 例如,图例应从最小值 = min(c(cat1,cat2,cat3)) 变为 max(c(cat1,cat2,cat3)) 对于所有六位数。同样,值 50 在所有 6 个数字中应该具有相同的颜色。

谢谢

【问题讨论】:

    标签: r colors raster shapefile sp


    【解决方案1】:

    你可以使用spplot

    示例数据:

    library(raster)
    s <- getData('GADM', country='FRA', level=2)[, c('GID_1', 'NAME_1', 'GID_2', 'NAME_2')]       
    set.seed(1)
    m <- matrix(runif(96*6, 0, 100), nrow=96, ncol=6)
    vars <- paste0("cat", 1:6) 
    colnames(m) <- vars
    d <- data.frame(GID_2 = s$GID_2, m)
    sd <- merge(s, d)
    

    使用spplot:

    spplot(sd, vars)
    

    有了基础情节,你可以做类似的事情

    brks <- seq(0,100,20)
    par(mfrow=c(2,3), mai=c(0,0,0.5,0))
    cols = rainbow(length(brks))
    for (v in vars) {
        cuts <- cut(data.frame(sd)[, v], brks)
        plot(s, col=cols[cuts], main=v)
    }
    

    【讨论】:

    • 快速问题:在您的解决方案中,为什么数字是从下到上排列的。如果希望 cat1、cat2、cat3、cat4... 从顶部开始怎么办?
    • 您可以将参数as.table=TRUE 添加到spplot 以按“表格顺序”获取地图
    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多