图例 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_line 图中显示多个分组 geom_hline 的图例