我正在尝试创建一个自定义标尺,以更好地显示我拥有的数据。对于第一个图,数据相对均匀,介于0和3之间。但是,对于我的第二个数据集,大多数数据小于100,大约90%的数据小于1000。 )
具有我要绘制的值的列称为“ data1”,其值是0到10000之间的整数。
我尝试通过插入
在https://gis.stackexchange.com/questions/178597/how-to-create-a-continuous-scale-with-distinct-custom-color-and-value-breaks-wit上应用代码map.df$brks <- cut(map.df$data1,
breaks=c(0, 1, 10, 25, 100, 250, 1000, 10000),
labels=c("0", "1 - 10", "11 - 25", "26 - 100",
"101 - 250", "251 - 1000", "1001 - 10000"))
注释行所在的位置,并在ggplot函数调用中将填充参数替换为brks,但出现以下错误:错误:离散值提供给连续刻度。
stateNames <- c("alabama", "alabama", "arizona", "arkansas", "california",
"colorado", "connecticut", "florida", "georgia")
countyNames <- c("autauga", "blount", "apache", "bradley", "orange",
"boulder", "new haven", "flagler", "turner")
dataCol <- c(0, 5, 15, 50, 150, 1000, 5000, 249, 30)
library(ggplot2)
map.county <- map_data('county')
counties <- unique(map.county[,5:6])
data_map <- merge(counties, data.frame(region=stateNames,
subregion=countyNames,
data1= dataCol),
by=c("region","subregion"), all.x=T, all.y=F
)
data_map$data1[which(is.na(data_map$data1))] <- fillValue
for(i in 1:length(data_map$data1)) {
if(is.na(data_map$data1[i])) {
data_map$data1[i] <- 0
}
}
library(data.table)
map.county <- data.table(map_data('county'))
setkey(map.county,region,subregion)
data_map <- data.table(data_map)
setkey(data_map,region,subregion)
map.df <- map.county[data_map]
#############################################################
ggplot(map.df, aes(x=long, y=lat, group=group, fill=data1)) +
scale_fill_gradientn("",colours=brewer.pal(9,"YlOrRd"))+
geom_polygon(colour = borderColor, size = 0.001) +
coord_map() +
expand_limits(x = map.county$long, y = map.county$lat) +
scale_x_continuous(breaks = NULL) +
scale_y_continuous(breaks = NULL) +
labs(x = "", y = "") +
labs(fill=dataName) +
theme(legend.position = "bottom", panel.background = element_blank())
有人对我如何创建自定义秤有建议吗?预先感谢!
答案 0 :(得分:2)
您快到了。以下带注释的代码中的解释:
# add include.lowest = TRUE, otherwise the 0 values will become NAs
map.df$brks <- cut(map.df$data1,
breaks = c(0, 1, 10, 25, 100, 250, 1000, 10000),
labels = c("0", "1 - 10", "11 - 25", "26 - 100",
"101 - 250", "251 - 1000", "1001 - 10000"),
include.lowest = TRUE)
# use scale_fill_brewer rather than scale_fill_gradientn; it expects
# a categorical variable (e.g. brks) while scale_fill_gradientn expects
# a continuous variable (e.g. data1).
# also, I suggest placing the legend at the side, as a vertical stack of
# boxes, which resembles a color bar.
# theme_void can be used to remove all backgrounds, axis labels, etc.
ggplot(map.df, aes(x=long, y=lat, group=group, fill=brks)) +
geom_polygon(colour = "grey", size = 0.001) +
coord_map() +
expand_limits(x = map.county$long, y = map.county$lat) +
scale_fill_brewer(palette = "YlOrRd") +
theme_void() +
theme(legend.position = "right")