r - 在绘图和大小中包含 NA 值,填充图例
问题描述
我在数据集中有 NA 值,我想将其包含在我的 ggplot 和图例中。我认为这可以通过指定na.values="somecolour"
选项轻松完成,如本文所示。但是,对于我的示例,代码运行时没有绘制任何 NA,也不包括图例中的条目。相反,具有缺失值的行会被自动删除。这是一些用于说明的代码:
set.seed(42)
lat <- rnorm(10, 54, 12)
long <- rnorm(10, 44, 12)
val <- rnorm(6, 10, 3)
val <- c(val,NA,NA,NA,NA)
df <- as.data.frame(cbind(long, lat, val))
library(ggplot2)
library(scales)
ggplot() +
geom_point(data=df, aes(x=lat, y=long, size=val, fill=val),shape=21,alpha=0.6) +
scale_size_continuous(range = c(2, 12), breaks=pretty_breaks(4)) +
scale_fill_distiller(direction = -1, palette="RdYlBu", breaks=pretty_breaks(4),na.value = "black") +
guides(fill = guide_legend(), size = guide_legend()) +
theme_minimal()
我究竟做错了什么?
解决方案
问题来自设置size
,aes
因为您无法NA
为scale_size_continuous
.
我的解决方案是分别绘制 NA 值(不完美,但有效)。要将它们添加到图例中,请在其中设置一些虚拟值aes
以调用那里的指南。
但是,存在一个问题,即NA
图例与非 NA 图例不能很好地对齐。要调整对齐方式,我们必须绘制另一组NA
具有最大非 NA 值大小的不可见值。
ggplot(df, aes(lat, long, size = val, fill = val)) +
geom_point(shape = 21,alpha = 0.6) +
geom_point(data = subset(df, is.na(val)), aes(shape = "NA"),
size = 1, fill = "black") +
geom_point(data = subset(df, is.na(val)), aes(shape = "NA"),
size = 14, alpha = 0) +
scale_size_continuous(range = c(2, 12), breaks = pretty_breaks(4)) +
scale_fill_distiller(direction = -1, palette = "RdYlBu", breaks = pretty_breaks(4)) +
labs(shape = " val\n",
fill = NULL,
size = NULL) +
guides(fill = guide_legend(),
size = guide_legend(),
shape = guide_legend(order = 1)) +
theme_minimal() +
theme(legend.spacing.y = unit(-0.4, "cm"))
PS:需要ggplot2_3.0.0
.
推荐阅读
- css - 如何使图像出现在悬停/活动链接下方?
- javascript - FIREBASE 警告:使用未指定的索引。无法从 firebase 获取数据
- pelican - 如何将当前 URL 插入到 Pelican 的文章/页面中
- php - 当我使用 PHP 更改页面时,我的 URL 没有更新,我该如何解决这个问题?
- python - 如何在python中找到2个字符串之间的最长公共结尾
- javascript - 无法使用 promise.all() 获得承诺结果
- python - 如何使用 Sphinx 和 ReadTheDocs 主题添加“Fork me on Github”功能区?
- python - 为什么这两种方法打印出不同的结果?
- c# - 有没有办法从结构中删除未使用的变量?
- java - Spring MessageSource basename 路径问题