r - 无法在 ggplot2 中为同一功能组合颜色和形状图例
问题描述
我正在尝试将情节中的shape
和colour
传说结合起来,但我所能做的就是结合colour
和linetype
。
样本数据:
> dput(sample_n(ALL_Spans, 10))
structure(list(UG = c("100", "124", "108", "92", "124", "84",
"100", "100", "124", "84"), S = c(12, 12, 12, 12, 12, 12, 12,
12, 12, 12), EQ = c("Cai", "AASHTO LRFD", "Suksawang & Nassif",
"AASHTO LRFD", "Modified Henry", "Modified Henry", "Analytical Data",
"Rigid Rotation", "Rigid Rotation", "Rigid Rotation"), DF = c(0.818313323177077,
1.01028571424963, 0.741281190719393, 1.08244897959184, 0.858545454545455,
0.858545454545455, 0.789710362673591, 0.71825, 0.926666666666667,
0.926666666666667), Girder = c("Exterior Girder", "Exterior Girder",
"Exterior Girder", "Interior Girder", "Interior Girder", "Exterior Girder",
"Exterior Girder", "Interior Girder", "Exterior Girder", "Exterior Girder"
), Type = c("Moment LLDF", "Shear LLDF", "Moment LLDF", "Shear LLDF",
"Moment LLDF", "Moment LLDF", "Moment LLDF", "Moment LLDF", "Moment LLDF",
"Moment LLDF"), L = c(240L, 300L, 260L, 220L, 300L, 200L, 240L,
240L, 300L, 200L), group = c("Cai 12", "AASHTO LRFD 12", "Suksawang & Nassif 12",
"AASHTO LRFD 12", "Modified Henry 12", "Modified Henry 12", "Analytical Data 12",
"Rigid Rotation 12", "Rigid Rotation 12", "Rigid Rotation 12"
)), row.names = c(NA, -10L), class = "data.frame")
情节代码:
b <- ggplot(data = ALL_Spans, aes(x = L, y = DF, colour = EQ)) +
geom_point(aes(shape = EQ), stroke = 0.2, size = 2) +
geom_line(size = 0.2, linetype = "dotted") +
scale_shape_manual(values = c(0,19,3,2,4,5,6,8)) + theme_classic() +
scale_colour_manual(values = c("black", "red", rep("black",6))) +
scale_x_continuous(breaks = seq(200,300,20), limits = c(200,300)) +
labs(x = "x", y = element_blank(), shape = element_blank()) +
theme(legend.title.align = 0.5, legend.position = "bottom",
axis.text = element_text(size=8, colour="black"),
axis.title.x = element_text(size=8, colour="black"),
axis.line = element_blank(),
axis.ticks = element_line(colour = "black", size = 0.2),
legend.text = element_text(size=8, margin = margin(-10,5,-10,-4.5)),
legend.title = element_text(size=8, margin = margin(-10,1.5,-10,0)),
legend.spacing.x = unit(0.1, 'cm'), legend.spacing.y = unit(0, 'cm'),
legend.background = element_blank(), panel.margin.y = unit(0.3, "lines"),
legend.box.background = element_rect(color = "black", size = 0.2)) +
guides(shape = guide_legend(nrow=2,byrow=TRUE), linetype = FALSE,
color = guide_legend(nrow = 2, byrow = TRUE)) +
facet_grid(Type~Girder)
当前的情节是
所需的情节是
解决方案
ggplot
默认情况下,将尝试尽可能组合图例;但是,如果图例创建、标签或指南的任何部分针对所讨论的两个美学修饰符进行了区分,您将覆盖此组合。在这种情况下,您有shape
和color
,它们默认组合在一起。问题在于这一行:
labs(x = "Span Length (ft)", y = element_blank(), shape = element_blank()) +
您在此处指明shape
美学的名称。默认情况下,它设置为waiver()
,因此该行将设置标题 ,shape=element_blank()
默认情况下设置标题color=waiver()
。这是两者的区别,因此创造了两个传说。要从图例中删除标题,您需要为两者指定相同的标题。要解决您的问题,请将其更改为以下内容:
labs(x = "Span Length (ft)", y = element_blank(), shape = element_blank(), color=element_blank()) +
我可以使用以下示例进行演示mtcars
:
p <- ggplot(mtcars, aes(disp, mpg)) +
geom_point(aes(color=factor(cyl), shape=factor(cyl)))
p
如果一个更改为element_blank()
(或NULL
,或其他任何东西......):
p + labs(shape=element_blank())
如果您需要完全删除图例,请将两者都设置为element_blank()
. 如果您需要整体更改图例名称,则必须类似地更改两个图例标题:
p + labs(shape="My Legend Title", color="My Legend Title")
编辑
OP,感谢您分享您的数据样本。当我添加color=element_blank()
到有问题的行时shape=element_blank()
,您将获得所需的组合图例:
推荐阅读
- iis - ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败
- mongodb - 如何为学生、教师、超级管理员等用户身份验证设计数据库
- json - 如何将 JSON 结构转换为字典或结构
- c++ - 为什么指针不继承字符串文字的固定大小
- java - 如何获取 jmDNS ServiceInfo 描述字符串
- java - 如何将消息保存到领域?
- php - 如何将给定的 SQL 查询转换为 Eloquent laravel?
- c# - C# 查看用户是否在命令行中输入了文本
- selenium - 在 jenkins v2.175 中创建节点时,“通过 Java Web Start 启动从代理”选项不可用
- c - fwrite 不会复制二进制文件副本中的所有字节