添加图例条目会使所有其他图例条目变成对角线和矩形。

3

我已经尝试了所有能找到的方法,但都没有成功。

我使用内置数据集mtcars复制了我的问题。我正在使用R中的ggplot2制作带有气泡图特征的散点图。我的代码中有一些在这个数据集中无法工作的东西,比如对数刻度和强制点的颜色,但除非这些的顺序是一个因素,否则我认为我可以以后再处理。

发生了什么事:

我必须有一条1:1线,我使用了geom_abline,因为它似乎是最合理的。我使用其他问题中找到的方法向图形添加图例,但当这样做时,所有其他图例条目的形状和方向都会改变。

理想情况下,如果可能的话,我希望解决这个问题并使虚线以水平方式显示。

p <- ggplot(mtcars, aes(drat,wt, size=hp, colour=cyl)) +geom_point()+
   scale_size_area(max_size=5)+
   labs(x="drat", y="wt")
    p+ theme(panel.background = element_rect(fill = "white", colour = "black"), 
         panel.grid.major = element_line(colour= "grey75"), 
         axis.text.x = element_text(colour = "black"),
         axis.text.y = element_text(colour = "black"))+
   guides(colour = guide_legend(override.aes = list(size=6)))+
   geom_abline(aes(intercept = 0, slope = 1, linetype = "dashed"),show_guide = TRUE)+
   scale_linetype_manual("1:1 line", values = 2)

更新:要解决对角矩形而不是圆点的问题,请参见下面的Didzis Elferts解决方案。仍在寻找一种方法使图例线水平而不像现在那样倾斜。 添加了Didzis Elferts修复代码如下:

p <- ggplot(mtcars, aes(drat,wt, size=hp, colour=cyl)) +geom_point()+
   scale_size_area(max_size=5)+
   labs(x="drat", y="wt")
    p+ theme(panel.background = element_rect(fill = "white", colour = "black"), 
         panel.grid.major = element_line(colour= "grey75"), 
         axis.text.x = element_text(colour = "black"),
         axis.text.y = element_text(colour = "black"))+
   guides(colour = guide_legend(override.aes = list(size=6, 
    linetype=0)),size = guide_legend(override.aes=list(linetype=0)))+
geom_abline(aes(intercept = 0, slope = 1, linetype = "dashed"),
    show_guide = TRUE)+scale_linetype_manual("1:1 line", values = 2)

如果我将 linetype="dashed" 放在 aes 之外,并将 show_guide 设为 F,则一切都看起来正常,但是当然,1:1线的图例消失了。我不知道这是否有任何帮助... - PavoDive
是的,这是我现在至少看起来还不错的基本方式。我只是觉得这是一个奇怪的问题,并且可以预见未来需要类似的图形。 - Kate_Rock
2个回答

1
一种暴力的方法是使用geom_hline在绘图中添加一条水平线,并基于该层创建图例,而不是geom_abline。当然,因为你实际上不想在绘图中显示一条水平线,所以你需要以某种方式隐藏它。我想到了两种方法。你可以将线放在y变量范围之外并设置ylim,或者尝试使线与面板背景颜色融合。第二个选项可能会受到网格线的影响。选项1:将geom_hline放在绘图限制之外:
ggplot(mtcars, aes(drat,wt, size=hp, colour=cyl)) +
    geom_point()+
    scale_size_area(max_size=5)+
    labs(x="drat", y="wt") + 
    theme(panel.background = element_rect(fill = "white", colour = "black"), 
        panel.grid.major = element_line(colour= "grey75"), 
        axis.text.x = element_text(colour = "black"),
        axis.text.y = element_text(colour = "black")) +
    geom_abline(aes(intercept = 0, slope = 1), linetype = "dashed") +
    geom_hline(aes(yintercept = 0, linetype = "dashed"), show_guide = TRUE) +
    ylim(1.5, NA) +
    guides(colour = guide_legend(override.aes = list(size=6, linetype = 0)),
          size = guide_legend(override.aes = list(linetype = 0))) +
    scale_linetype_manual("1:1 line", values = 2)

选项2,将geom_hline放在其他层的后面并使其变为白色,在图例中使用override.aes将其变为黑色:

ggplot(mtcars, aes(drat,wt, size=hp, colour=cyl)) +
    geom_hline(aes(yintercept = 3.2, linetype = "dashed"), show_guide = TRUE, color = "white") +
    geom_point()+
    scale_size_area(max_size=5)+
    labs(x="drat", y="wt") + 
    theme(panel.background = element_rect(fill = "white", colour = "black"), 
         panel.grid.major = element_line(colour= "grey75"), 
         axis.text.x = element_text(colour = "black"),
         axis.text.y = element_text(colour = "black")) +
    geom_abline(aes(intercept = 0, slope = 1), linetype = "dashed") +
    guides(colour = guide_legend(override.aes = list(size=6, linetype = 0)),
          size = guide_legend(override.aes = list(linetype = 0)),
          linetype = guide_legend(override.aes = list(colour = "black"))) +
    scale_linetype_manual("1:1 line", values = 2)

0

从颜色和大小图例中删除行的一种方法是在override.aes=中为colour=size=设置linetype=0

 + guides(colour = guide_legend(override.aes = list(size=6,linetype=0)),
        size = guide_legend(override.aes=list(linetype=0)))

它肯定有效,但是你如何使线条虚线?如果我应用你的解决方案,线条就变成了实线... - PavoDive
太好了!问题解决了。但是当我将它与其他代码组合在一起时,它看起来很混乱。有没有办法改变图例图标中线的方向? - Kate_Rock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接