首页 > 解决方案 > 无法在 ggplot2 中为同一功能组合颜色和形状图例

问题描述

我正在尝试将情节中的shapecolour传说结合起来,但我所能做的就是结合colourlinetype

样本数据:

> 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)

当前的情节是

在此处输入图像描述

所需的情节是

在此处输入图像描述

标签: rggplot2

解决方案


ggplot默认情况下,将尝试尽可能组合图例;但是,如果图例创建、标签或指南的任何部分针对所讨论的两个美学修饰符进行了区分,您将覆盖此组合。在这种情况下,您有shapecolor,它们默认组合在一起。问题在于这一行:

 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(),您将获得所需的组合图例:

在此处输入图像描述


推荐阅读