为线条/形状组合正确显示 ggplot 图例

Posted

技术标签:

【中文标题】为线条/形状组合正确显示 ggplot 图例【英文标题】:Display ggplot legend correctly for line/shape combinations 【发布时间】:2019-11-19 00:41:10 【问题描述】:

我正在尝试使用三种不同颜色的线为三个组创建一个图,但其中只有两个组具有点标记。我可以正确显示绘图,但图例显示了所有三个组的相同点标记。

我使用 mpg 数据集创建了一个可重现的示例

library(tidyverse)

ggplot(mpg) +
  geom_line(mapping = aes(x = displ, y = cty, color = drv), size = 1) +
  geom_point(data = subset(mpg, drv != '4'), mapping = aes(x = displ, y = cty, color = drv, shape = drv), size = 3) +
  scale_color_manual(name="Variable", labels = c("4", "f", "r"), values=c("4" = "#DA2128", "f" = "black", "r" = "blue"))  +
  scale_shape_manual(name="Variable", labels = c("f", "r"), values = c("f" = 16, "r" = 17), guide = FALSE)

组“4”在图例中不应有点标记,组“r”应显示三角形标记

提前感谢您的帮助

【问题讨论】:

【参考方案1】:

在您的geom_line() 中添加linetype 参数和感兴趣的变量(在本例中为drv)给出您预期的结果。

library(tidyverse)

ggplot(mpg) +
  geom_line(mapping = aes(x = displ, y = cty, color = drv, linetype = drv), size = 1) +
  geom_point(data = subset(mpg, drv != '4'), mapping = aes(x = displ, y = cty, color = drv, shape = drv), size = 3) +
  scale_color_manual(name="Variable", labels = c("4", "f", "r"), values=c("4" = "#DA2128", "f" = "black", "r" = "blue"))  +
  scale_shape_manual(name="Variable", labels = c("f", "r"), values = c("f" = 16, "r" = 17), guide = FALSE)

【讨论】:

谢谢。这给了我两个传说。一种称为具有不同线型的驱动器,另一种称为变量,它为所有三组显示相同的点标记。我想要一个图例,以正确的线条颜色和标记显示三个组,如图所示。【参考方案2】:

尝试一些 alpha

ggplot(mpg, aes(x = displ, y = cty, color = drv, shape = drv)) +
  geom_line() +
  geom_point(aes(alpha=drv), size = 3) + 
  scale_alpha_manual(values = c(0,1,1)) +
  scale_shape_manual(values = c(1,16, 17))

或者简单地将形状 4 设置为 NA

ggplot(mpg, aes(x = displ, y = cty, color = drv, shape = drv)) +
  geom_line() +
  geom_point(size = 3) + 
  scale_shape_manual(values = c(NA, 16, 17)) +
  scale_color_manual(values = c("#DA2128", "black", "blue"))

【讨论】:

感谢这项工作。我还可以手动设置单个颜色吗? 啊我想我明白你现在做了什么了。将 alpha 设置为 0 会隐藏其中一个刻度的点。再次感谢。忽略我的第一条评论我已经用 scale_color_manual 设置了颜色并得到了想要的结果。 当然。您可以简单地添加您的scale_color_manual(values=c("#DA2128", "black", "blue"))。如果您对它感到满意,请接受答案。【参考方案3】:

您还可以禁用 shape 的图例并在 color 图例中手动设置 shape 的值: ggplot(mpg) + geom_line(mapping = aes(x = displ, y = cty, color = drv), size = 1) + geom_point(data = subset(mpg, drv != '4'), mapping = aes(x = displ, y = cty, color = drv, shape = drv), size = 3) + scale_color_manual(name="Variable", labels = c("4", "f", "r"), values=c("4" = "#DA2128", "f" = "black", "r" = "blue"), guide=guide_legend(override.aes = list(shape = c("4" = NA, "f" = 16, "r" = 17)))) + scale_shape_manual(values = c("f" = 16, "r" = 17), guide=F)

【讨论】:

这也能得到想要的结果

以上是关于为线条/形状组合正确显示 ggplot 图例的主要内容,如果未能解决你的问题,请参考以下文章

ggplot图形上线条的动态形状和大小变化创建第二个图例[重复]

ggplot 有两个图例,颜色图例中显示错误的形状

图例标签组合图(ggplot 和拼凑)

ggplot2 - 在大小图例中显示多个键(形状)

将图例添加到组合的线和条形图 ggplot

R语言ggplot2可视化为组合图添加综合图例实战:使用ggpubr包ggarrange函数实现综合图例使用patchwork包实现综合图例