gpt4 book ai didi

r - 使用ggplot为 map 上不同的相邻区域着色

转载 作者:行者123 更新时间:2023-12-04 09:30:06 27 4
gpt4 key购买 nike

我正在尝试使用 ggplot 制作 R 中不同区域的 map ,其中相邻区域的颜色不同,这与 five color theorem 的内容有关。描述。

地区是加利福尼亚州县的组,用数字编码(这里是 c20 列)。使用具有定性比例的 ggplot() 和 geom_map() 为区域着色,我得到的最接近的是那里:

ggplot() + geom_map(data = data, aes(map_id = geoid, fill = as.factor(c20 %% 12)), 
map = county) + expand_limits(x = county$long, y = county$lat) +
coord_map(projection="mercator") +
scale_fill_brewer(palette = "Paired") +
geom_text(data = distcenters, aes(x = clong, y = clat, label = cluster, size = 0.2))

enter image description here

问题是来自不同地区(即具有不同数字)的相邻县有时会具有相同的颜色。例如,在洛杉矶附近,来自 33 和 45 区的县是相同的颜色,我们不会在视觉上区分这些区域。

有没有办法用ggplot做到这一点?

最佳答案

尝试这个。它需要一个空间多边形数据框,并为每个元素返回一个颜色向量,这样没有两个相邻的多边形具有相同的颜色。

您需要安装 spdep先打包。

nacol <- function(spdf){
resample <- function(x, ...) x[sample.int(length(x), ...)]
nunique <- function(x){unique(x[!is.na(x)])}
np = nrow(spdf)
adjl = spdep::poly2nb(spdf)
cols = rep(NA, np)
cols[1]=1
nextColour = 2

for(k in 2:np){
adjcolours = nunique(cols[adjl[[k]]])
if(length(adjcolours)==0){
cols[k]=resample(cols[!is.na(cols)],1)
}else{
avail = setdiff(nunique(cols), nunique(adjcolours))
if(length(avail)==0){
cols[k]=nextColour
nextColour=nextColour+1
}else{
cols[k]=resample(avail,size=1)
}
}
}
return(cols)
}

测试:
  library(spdep)
example(columbus)
columbus$C = nacol(columbus)
plot(columbus,col=columbus$C+1)

关于r - 使用ggplot为 map 上不同的相邻区域着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28778734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com