如何为hline添加图例?

26

我想为hline图添加一个图例。

我的子集头看起来像这样

Site       Date    Al
1   Bo6 2014-10-07 152.1
2   Bo1 2014-10-07 157.3
3   Bo3 2014-10-07 207.1
4   Bo4 2014-10-07 184.3
5   Bo5 2014-10-07  23.2
13  Bo6 2014-10-14  96.8

我的代码如下:

require(ggplot2)
require(reshape2)
require(magrittr)
require(dplyr)
require(tidyr)
setwd("~/Documents/Results")
mydata <- read.csv("Metals sheet Rwosnb5.csv")
mydata <- read.csv("Metals sheet Rwosnb5.csv")
L <- subset(mydata, Site =="Bo1"| Site == "Bo2"| Site == "Bo3"| Site ==          "Bo4"| Site == "Bo5" | Site == "Bo6", select = c(Site,Date,Al))
L$Date <- as.Date(L$Date, "%d/%m/%Y")
I <- ggplot(data=L, aes(x=Date, y=Al, colour=Site)) +
  geom_point() + 
  labs(title = "Total Al in the Barlwyd and Bowydd in Pant-yr-afon    sites B4-B9
   2014-2015.", x = "Month 2014/2015",
   y = "Total concentration (mg/L)") +
  scale_y_continuous(limits = c(0, 500)) +
  scale_x_date(date_breaks = "1 month", date_labels = "%m")
I + geom_hline(aes(yintercept= 10),  linetype = 2, colour= 'red',   show.legend =TRUE) +
  geom_hline(aes(yintercept= 75.5), linetype = 2, colour= 'blue', show.legend = TRUE)

由于某种原因,图例无法正常显示 -- 图例上有六个网站名字被划掉了。我希望能够创建一个标题为“limit”的图例,并且 Label 1(10)= NRW limit, label 2 (75.5)=地球化学图集限制。


1
请阅读R中如何提供最小可重现示例的方法,然后相应地进行编辑和改进。一个好的帖子通常会提供最少的输入数据、期望的输出数据和代码尝试-所有这些都可以在新/干净的R会话中复制-粘贴-运行。例如,您的示例不能运行,因为除了您之外没有人拥有CSV文件,缺少library(ggplot2)等等。 - lukeA
你尝试过使用 show_guide 而不是 show.legend 吗?https://dev59.com/E3PYa4cB1Zd3GeqPhEkZ 和 https://dev59.com/E3PYa4cB1Zd3GeqPhEkZ - bVa
我刚刚尝试了一下,出现了错误消息:“show_guide已被弃用,请改用show.legend”。 - LucySHE
1个回答

57

您可以使用 linetype 美学属性创建一个单独的图例来显示水平线,而不是将它们添加到现有的图例中。

为此,我们可以将 linetype 放入 aes 之内,同时仍然映射为一个常量。我将您所需的标签用作常量。图例名称和使用的线型可以在 scale_linetype_manual 中设置。我删除了 show.legend = TRUE 以使线条不出现在其他图例中。图例颜色在 override.aes 中被固定。

I + geom_hline(aes(yintercept= 10, linetype = "NRW limit"), colour= 'red') +
    geom_hline(aes(yintercept= 75.5, linetype = "Geochemical atlas limit"), colour= 'blue') +
    scale_linetype_manual(name = "limit", values = c(2, 2), 
                      guide = guide_legend(override.aes = list(color = c("blue", "red"))))

在这里输入图片描述


谢谢,太棒了!真是个 R 专家 :-) - LucySHE
1
@HermanToothrot 如果你想让框更宽,这样可以看到更多的行,你可以改变“键”(图例框)的宽度。这可以通过theme中的“legend.key.width”参数来完成。 - aosmith
1
@Puddlebunk values 是我选择线条外观(“linetype”)的地方。您需要提供与线条数量相同的值。在我的示例中,我选择了两个相同类型的线条,因此所有线条看起来都相同;如果您有三条线,则需要在 values 中使用三个 linetypes。请参见此处 以获取有关可选择的线条类型的信息。 - aosmith
有没有办法可以切换线和点图例的相对位置?比如说在这种情况下,我想把“限制”图例放在顶部? - user2017023
1
@user2017023,请参考guide_legend()中的order参数来设置多个图例的顺序。 - aosmith
显示剩余6条评论

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