r - 在带有 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
?
解决方案
您可以通过在第一个图中定义limits
inscale_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
)
推荐阅读
- jdbc - 驱动相关问题
- android - Expo 应用程序在 Android 模拟器中冻结
- c# - 如何解决此内存不足异常?适用于 VS2017 但不适用于 VS2019
- reactjs - 在自定义类中使用反应重定向组件
- ios - 在导航控制器的导航栏下方添加视图
- angular - 制作一个选项卡相关的选择列表?角 7 材料
- angular - 我怎样才能使它只有上面这个标题中的这个“mat-card-subtitle”变成红色?
- java - 在 JavaFX 中验证数据库中已存在的值
- mysql - 使用 Group By 和 Union All 计算多列?
- android - 如果 Activity 已经打开,请避免再次打开 Activity