首页 > 解决方案 > 在带有 ggplot2 的 ggarrange 中使用 common.legend 时缺少图例项

问题描述

给定如下设置:

require(ggplot2)
require(ggpubr)

size = 20
s = 0.2
d = seq(0,2*pi, length.out=size)
df = data.frame(
  d=d + runif(size)*s,
  a=sin(d) + runif(size)*s,
  b=sin(d-10) + runif(size)*s,
  c=cos(2*d) + runif(size)*s
)

当试图用ggarrange

ggarrange(
  (
    ggplot(df, aes(x=d, palette="Set1"))
    + geom_smooth(aes(y=a, color="A"), se=FALSE)
    + scale_color_manual(values=c("#999999"))
  ),
  (
    ggplot(df, aes(x=d, palette="Set2"))
    + geom_smooth(aes(y=b, color="B"), se=FALSE)
    + geom_smooth(aes(y=c, color="C"), se=FALSE)
  ),
  common.legend=TRUE
)

通用图例仅显示第一个ggplot参数中的项目,在本例中为A行。如何在不重新格式化数据框和使用的情况下获得包含所有行的通用图例facet

ggarrange 线图

标签: rggplot2ggpubr

解决方案


您可以通过在第一个图中定义limitsinscale_color_manual()以及为每个值设置一个值来做到这一点。

例如,您可以添加

 scale_color_manual(limits = c("A", "B", "C"),
                             values = c("#999999",hcl(c(15, 195), 100, 65)))

到你的例子的第一个情节。

ggarrange(
    (
        ggplot(df, aes(x=d, palette="Set1"))
        + geom_smooth(aes(y=a, color="A"), se=FALSE)
        + scale_color_manual(limits = c("A", "B", "C"),
                             values = c("#999999",hcl(c(15, 195), 100, 65)))
    ),
    (
        ggplot(df, aes(x=d, palette="Set2"))
        + geom_smooth(aes(y=b, color="B"), se=FALSE)
        + geom_smooth(aes(y=c, color="C"), se=FALSE)
    ),
    common.legend=TRUE
)

在此处输入图像描述


推荐阅读