繁体   English   中英

将 geom_line 的图例添加到 ggplot

[英]Adding legend for geom_line to ggplot

我正在使用 ggplot 生成图表折线图,该图的主要目的是显示某些点随时间推移的一些样本值(点的数量可能会有所不同,每个点都有一条线)。 我还添加了一行来显示这些值是否超过了预定义的限制。 我在右边得到一个图例,映射每个点,但我没有设法为限制添加一个图例。 这是生成图表的代码:

library(ggplot2)
df2 <- subset(dataset, ResultNumericValue < 1000000)
names(df2)[4] <- "PointName"
df2[[1]] <- as.POSIXct(df2[[1]], tz="GMT", format="%Y-%m-%dT%H:%M")
ggplot(df2, aes(x=SampleDate, y=ResultNumericValue)) +
  geom_line(aes(color=PointName)) +
  geom_point(aes(color=PointName))+
  geom_line(aes(y = UpperLimit, color=UpperLimit), color="red", size=1) +
  labs(x = "Sample Date", y = "Sample Value", color="Points") +
  theme(panel.grid.major = element_line(color = "darkgrey", size = 0.5, linetype = 3),
  panel.background = element_rect(fill = "white", colour = "grey50"))

看起来像这样:

                SampleDate           ResultNumericValue  UpperLimit    point name
1 2020-03-03T16:00:00.0000000                  4         13            1
2 2020-03-05T16:00:00.0000000                  1         13            1
3 2020-03-23T07:30:48.2870000                  2         13            1
4 2020-03-24T00:07:43.6030000                  1         13            CW1
5 2020-03-24T06:56:41.1170000                  2         13            CW1

这就是图表的样子: graph

我只是想补充一点,以说明红色水平线是上限。 我尝试使用 scale_discrete_manual 但它改变了网站图例。 我应该怎么办 ?

问题是您将颜色作为参数传递。 如果你想让你的线显示在图例中,你必须映射color aes。 为此,在颜色 aes 上映射一个常量值,例如"UpperLimit" ,并通过scale_color_manual设置您想要的颜色。 此外,我使用了guide_legendoverride.aes参数从上限线的图例键中删除了点:

library(ggplot2)
df2 <- subset(dataset, ResultNumericValue < 1000000)
names(df2)[4] <- "PointName"
df2[[1]] <- as.POSIXct(df2[[1]], tz = "GMT", format = "%Y-%m-%dT%H:%M")
ggplot(df2, aes(x = SampleDate, y = ResultNumericValue)) +
  geom_line(aes(color = PointName)) +
  geom_point(aes(color = PointName)) +
  geom_line(aes(y = UpperLimit, color = "UpperLimit"), size = 1) +
  labs(x = "Sample Date", y = "Sample Value", color = "Points") +
  theme(
    panel.grid.major = element_line(color = "darkgrey", size = 0.5, linetype = 3),
    panel.background = element_rect(fill = "white", colour = "grey50")
  ) +
  scale_color_manual(values = c("1" = "blue", CW1 = "green", UpperLimit = "red")) +
  guides(color = guide_legend(override.aes = list(shape = c(16, 16, NA))))

数据

dataset <- structure(list(
  SampleDate = c(
    "2020-03-03T16:00:00.0000000",
    "2020-03-05T16:00:00.0000000", "2020-03-23T07:30:48.2870000",
    "2020-03-24T00:07:43.6030000", "2020-03-24T06:56:41.1170000"
  ),
  ResultNumericValue = c(4L, 1L, 2L, 1L, 2L), UpperLimit = c(
    13L,
    13L, 13L, 13L, 13L
  ), point.name = c(
    "1", "1", "1", "CW1",
    "CW1"
  )
), class = "data.frame", row.names = c(
  "1", "2", "3",
  "4", "5"
))

处理此问题的一种简单方法是使用geom_hline作为上限。 如果将其线型映射到字符串'Upper Limit' ,它将在图例中具有自己的单独条目。

ggplot(df2, aes(SampleDate, ResultNumericValue, color = PointName)) +
  geom_line() +
  geom_point() +
  geom_hline(aes(yintercept = 13, linetype = 'Upper Limit'), color = "red", 
             size = 1) +
  labs(x = "Sample Date", y = "Sample Value", 
       color = "Points", linetype = NULL) +
  theme(panel.grid.major = element_line(color = "darkgrey", 
                                        size = 0.5, linetype = 3),
        panel.background = element_rect(fill = "white", colour = "grey50"))

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM