R 在绘图和尺寸中包括NA值,填充图例
我在数据集中有NA值,我想将其包括在我的ggplot和图例中。我认为这可以通过指定R 在绘图和尺寸中包括NA值,填充图例,r,ggplot2,legend,na,R,Ggplot2,Legend,Na,我在数据集中有NA值,我想将其包括在我的ggplot和图例中。我认为这可以通过指定na.values=“somecolor”选项轻松实现,如post中所示。但是,在我的示例中,代码运行时没有绘制任何NAs,也没有在图例中包含条目。而是自动删除缺少值的行。下面是一些用于说明的代码: set.seed(42) lat <- rnorm(10, 54, 12) long <- rnorm(10, 44, 12) val <- rnorm(6, 10, 3) val <- c
na.values=“somecolor”
选项轻松实现,如post中所示。但是,在我的示例中,代码运行时没有绘制任何NAs,也没有在图例中包含条目。而是自动删除缺少值的行。下面是一些用于说明的代码:
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()
set.seed(42)
lat问题来自于在aes
中设置size
,因为您不能在scale\u size\u continuous
中设置NA
值的大小
我的解决方案是分别绘制NA值(不完美,但可行)。要将它们添加到图例中,请在aes
中设置一些虚拟值以调用该向导
但是,有一个问题是NA
legend不能与非NA legend很好地对齐。要调整对齐,我们必须绘制另一组不可见的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:requiresggplot2\u 3.0.0
谢谢@PoGibas的建议。然而,这或多或少是我开始的地方(见我前面的问题)。我的目标是将所有信息都放在一个图例中,但ggplot似乎并不能让这变得容易。…@M.Teich有什么办法可以改进我目前的答案吗?