我有一张带有图例渐变的 map ,我想为 NA 值添加一个框。我的问题真的很像this one和 this one .我也读过 this topic ,但我在某处找不到“不错”的解决方案,或者可能没有?
这是一个可重现的示例:
library(ggplot2)
map <- map_data("world")
map$value <- setNames(sample(-50:50, length(unique(map$region)), TRUE),
unique(map$region))[map$region]
map[map$region == "Russia", "value"] <- NA
ggplot() +
geom_polygon(data = map,
aes(long, lat, group = group, fill = value)) +
scale_fill_gradient2(low = "brown3", mid = "cornsilk1", high = "turquoise4",
limits = c(-50, 50),
na.value = "black")
所以我想为俄罗斯的 NA 值添加一个黑匣子。我知道,我可以用数字替换 NA,所以它会出现在渐变中,我想,我可以编写如下解决方法,但所有这些解决方法对我来说似乎都不是一个很好的解决方案,我也想避免“无意义”警告:
ggplot() +
geom_polygon(data = map,
aes(long, lat, group = group, fill = value)) +
scale_fill_gradient2(low = "brown3", mid = "cornsilk1", high = "turquoise4",
limits = c(-50, 50),
na.value = "black") +
geom_point(aes(x = -100, y = -50, size = "NA"), shape = NA, colour = "black") +
guides(size = guide_legend("NA", override.aes = list(shape = 15, size = 10)))
Warning messages:
1: Using size for a discrete variable is not advised.
2: Removed 1 rows containing missing values (geom_point).
最佳答案
一种方法是拆分您的 value
变量转化为离散量表。我已经使用 cut()
完成了此操作.然后,您可以使用离散色标,其中“NA”是不同颜色标签之一。我用过 scale_fill_brewer()
,但还有其他方法可以做到这一点。
map$discrete_value = cut(map$value, breaks=seq(from=-50, to=50, length.out=8))
p = ggplot() +
geom_polygon(data=map, aes(long, lat, group=group, fill=discrete_value)) +
scale_fill_brewer(palette="RdYlBu", na.value="black") +
coord_quickmap()
ggsave("map.png", plot=p, width=10, height=5, dpi=150)
另一种解决方案
因为原始海报说他们需要保留颜色渐变比例和颜色条样式的图例,所以我发布了另一种可能的解决方案。它有3个组成部分:
color
使用 aes()
缩放将某些内容映射到 color
.我使用 aes(colour="")
映射了一列空字符串. NA
. guides()
连同 override.aes
用于确保将新颜色图例绘制为正确的颜色。 p2 = ggplot() +
geom_polygon(data=map, aes(long, lat, group=group, fill=value, colour="")) +
scale_fill_gradient2(low="brown3", mid="cornsilk1", high="turquoise4",
limits=c(-50, 50), na.value="black") +
scale_colour_manual(values=NA) +
guides(colour=guide_legend("No data", override.aes=list(colour="black")))
ggsave("map2.png", plot=p2, width=10, height=5, dpi=150)
关于r - 将 NA 值的框添加到 ggplot 图例以获得连续 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42365483/