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

2 回答 2

1

在图例中获得水平线的一种蛮力方法是将水平线添加到绘图中,geom_hline并将图例基于该层而不是geom_abline.

当然,因为你实际上并不想要在你的情节中出现一条水平线,所以你必须以某种方式隐藏它。我想出了两种 hacky 方法来做到这一点。您可以将线放在 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)
于 2015-07-16T21:51:31.743 回答
0

从颜色和大小图例中删除线条的一种方法是在linetype=0内部设置override.aes=forcolour=size=

 + guides(colour = guide_legend(override.aes = list(size=6,linetype=0)),
        size = guide_legend(override.aes=list(linetype=0)))
于 2015-07-16T18:59:26.420 回答