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

时间:2015-07-16 17:44:09

标签: r ggplot2 legend legend-properties

我尝试过任何我能找到但无济于事的事情。

我使用内置数据集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)

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

从颜色和尺寸图例中删除线条的一种方法是在linetype=0 override.aes=colour=

中为size=设置 + guides(colour = guide_legend(override.aes = list(size=6,linetype=0)), size = guide_legend(override.aes=list(linetype=0)))
foreach ($wholeTeam as $thisMember)
    $sandwichMiddle = $thisMember->picfn . '" id="memberid-' . $thisMember->id . '"';
    echo $sandwichTop . $sandwichMiddle . $sandwichBottom;