Легенда geom_hline не в правильном порядке
Я сделал барплот в 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()
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.: Данные, которые вы предоставили, не имеют смысла, так как две строки перекрываются.