首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在带有ggplot2的ggarrange中使用common.legend时缺少图例项

在带有ggplot2的ggarrange中使用common.legend时缺少图例项
EN

Stack Overflow用户
提问于 2019-06-14 03:32:46
回答 1查看 1.1K关注 0票数 3

给定如下设置:

代码语言:javascript
复制
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绘制线条时

代码语言:javascript
复制
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的情况下获得包含所有行的通用图例

EN

回答 1

Stack Overflow用户

发布于 2019-06-14 04:56:50

您可以通过在第一个图中的scale_color_manual()中定义limits,并为每个值设置一个值来实现这一点。

例如,您可以添加

代码语言:javascript
复制
 scale_color_manual(limits = c("A", "B", "C"),
                             values = c("#999999",hcl(c(15, 195), 100, 65)))

到您的示例的第一个图。

代码语言:javascript
复制
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
)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56587458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档