【发布时间】:2017-07-10 23:12:51
【问题描述】:
我有一张带有图例渐变的地图,我想为 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).
【问题讨论】:
-
不幸的是,我错过了评论已发布答案的声誉积分,但我认为@bdemarest 的最佳答案有一个小错误:对于“另一种解决方案”,在代码行
guides(colour=guide_legend("No data", override.aes=list(colour="black")))。在override.aes中,不应使用colour。它应该是fill,否则我猜默认盒子的颜色是黑色的,而colour你只需将颜色框轮廓更改为黑色。所以我建议在答案中换行如下:guides(colour=guide_legend("No data", override.aes=list(fill="black"))) -
@YoannPageaud,是的,好点。在测试您提出的更改时,我做了一些试验。我发现整行
guides(...)并不是真正需要的。删除该行并将前一行更改为scale_colour_manual(values=NA, name="No data")后,将创建相同的图。可能是我弄错了,或者是最近 2 年内更改为ggplot2的原因。