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

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

最佳答案

在图例中获得水平线的一种蛮力方法是通过 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)

关于r - 添加图例条目使所有其他图例条目成为对角线和矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31461079/

相关文章:

r - 为什么我不能得到小于 2.2e-16 的 p 值?

css - .left-column[] 和 .right-column][] 不对齐

r - 不希望在传递给函数时修改原始 data.table

r - 分层/多级饼图

reporting-services - SSRS 根据条件隐藏图例中的项目

python - 为什么 matplotlib 中的图例在 `savefig()` 之后没有自行清除?

r - ggplots 存储在绘图列表中,以在 for 循环内生成绘图时尊重变量值

r - purrr 使用模型到数据

r - 使用ggplot多线和居中对齐x轴标签

r - ggplot图例为什么显示 “colour”参数?