图例 geom_hline 顺序不正确

Posted

技术标签:

【中文标题】图例 geom_hline 顺序不正确【英文标题】:Legend geom_hline not in right order 【发布时间】:2018-03-05 00:19:51 【问题描述】:

我在 ggplot 中制作了一个条形图,并添加了几行。发生的情况是线条的颜色和描述不对应:

黄线应该有“Median Member”的描述,但显示为“avg Member”。这里会发生什么?我使用的代码:

library(ggplot2)
library(dplyr)

MemberID=c(1,1,1, 2, 2, 2)
ClientCode = c(10,100,1000, 20, 200, 2000)
Duration = c(2356, 1560, 9000, 4569, 3123, 8000)


df <- data.frame(MemberID, ClientCode, Duration)

dr <- df %>%
   filter(MemberID == 1)

dr_avg <- df 

ggplot(dr, aes(reorder(as.character(ClientCode), -Duration), Duration, fill=-Duration)) +
  geom_bar(stat="identity") + # the height of the bar will represent the value in a column of the data frame
  xlab('ClientCode') +
  ylab('Duration (Minutes)') +
  geom_hline(data=dr, aes(yintercept=mean(Duration), linetype = 'Avg Member'), color = 'red', show.legend = TRUE) +
  geom_hline(data=dr, aes(yintercept=median(Duration), linetype = 'Median Member'), color = 'orange', show.legend = TRUE) +
  geom_hline(data=dr_avg, aes(yintercept=mean(Duration), linetype = 'Avg all data'), color = 'blue', show.legend = TRUE) +
  scale_linetype_manual(name = "Line", values = c(2, 2, 2), guide = guide_legend(override.aes = list(color = c("red", "orange", "blue")))) +coord_flip()

【问题讨论】:

嗨 Alfred,您可能想在 rstudio 社区网站上发布这个问题:community.rstudio.com 并带有一个代表,以更好地帮助其他人看到您面临的问题。 谢谢,不知道那个社区。​​span> 【参考方案1】:

不要为您要插入的每一行创建geom_hline。如果你有一百个呢?创建一个单独的对象d 并在那里指定不同的线型和颜色geom_hline(data = d, aes(yintercept = value, linetype = name, color = name))。当您想指定颜色时,请使用:scale_colour_manual(values = c("red", "orange", "blue"))

d1 <- summarize(df, mean(Duration), median(Duration))
d2 <- summarize(dr_avg, mean(Duration))
d <- data.frame(value = as.numeric(c(d1, d2)), 
               name = c('Avg Member', 'Median Member', 'Avg all data'))

ggplot(dr, aes(reorder(as.character(ClientCode), -Duration), 
               Duration, 
               fill = factor(-Duration))) +
    geom_bar(stat = "identity") + 
    labs(x = "ClientCode",
         y = "Duration (Minutes)") +
    geom_hline(data = d, aes(yintercept = value, linetype = name, color = name)) +
    scale_fill_brewer(palette = "Dark2") +
    scale_colour_manual(values = c("red", "orange", "blue")) +
    coord_flip() +
    theme_bw()

PS.:您提供的数据没有意义,因为两行重叠。

【讨论】:

谢谢,这行得通!这样代码也更加整洁。当对 d1 使用 dr 而不是 df 时,会出现三行。 Dr = 过滤,取 3 行而不是所有行。

以上是关于图例 geom_hline 顺序不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何为 geom_hline 添加自定义图例

切换图例顺序 [重复]

在 geom_line 图中显示多个分组 geom_hline 的图例

在使用 gghighlight 时为几个 geom_hlines 创建图例

根据组在图例中添加平均线 - geom_hline

如何将echarts图例与曲线显示顺序不一致