Удалить строки из цвета и заполнить легенды
У меня есть сюжет с тремя разными легендами: один для linetype
, один для color
и один для fill
. В легендах color
и fill
есть также некоторые строки, которые я хочу удалить, но как?
Вот пример кода:
# some data
hline_df <- data.frame(name = c('a', 'b'), y = c(1, 2))
df <- data.frame(x = c(1, 2), y = c(0.5, 1.5), con = c('a', 'b'), col = c('d', 'e'))
# the plot
ggplot(df, aes(x, y, fill = con)) +
geom_bar(stat = 'identity') +
geom_point(aes(color = col)) +
geom_hline(data = hline_df, aes(yintercept = y, linetype = name),
color = 'red', show_guide = TRUE)
![enter image description here]()
Я получаю руководство "имя" для обеих красных линий, это нормально.
Гид "col" имеет красные линии, пересекающие точки, я хочу их удалить!
В руководстве "con" также есть красные линии, которые следует удалить.
Я мог бы модифицировать части легенды с помощью
guides(fill = guide_legend(override.aes = list(colour = NULL)),
color = guide_legend(override.aes = list(colour = NULL)))
Это удаляет цвет, но линии все еще существуют.
Спасибо заранее!
Ответы
Ответ 1
Вы можете установить linetype = 0
или "blank"
(в разных linetype
здесь) для fill
и color
guide
в вашем вызове override.aes
.
Также обратите внимание, что я переместил fill
aes
с верхнего уровня в ggplot
на geom_bar
.
ggplot(df, aes(x, y)) +
geom_bar(aes(fill = con), stat = 'identity') +
geom_point(aes(color = col)) +
geom_hline(data = hline_df, aes(yintercept = y, linetype = name), color = 'red', show_guide = TRUE) +
guides(fill = guide_legend(override.aes = list(linetype = 0)),
color = guide_legend(override.aes = list(linetype = 0)))
![enter image description here]()
Ответ 2
Как было предложено пользователем20650
ggplot(df, aes(x,y)) +
geom_hline(data=hline_df,aes(yintercept=y,linetype=name), color='red',show_guide=TRUE) +
geom_point(aes(color=col), size=5) +
geom_bar(aes(fill=con), stat='identity') +
geom_hline(data=hline_df,aes(yintercept=y,linetype=name), color='red',show_guide=F) +
guides(color = guide_legend(override.aes = list(linetype = 0)))
Итак, первая geom_hline создает легенду, но линия за решеткой...
второй вызов приносит линию перед решетками, но не печатает легенду (отличная идея).
Руководство las переписывает тип линии эстетики с 0... Таким образом, он удаляет строку из легенд... Я пытался с помощью NULL
, но это не сработало раньше...
Еще раз спасибо.
![enter image description here]()
Ответ 3
Использование:
ggplot(df, aes(x,y,fill=con)) + geom_bar(stat='identity') +
geom_point(aes(color=col)) +
geom_hline(data=hline_df,aes(yintercept=y,linetype=name),color='red',show_guide=FALSE) +
guides(linetype=FALSE,color=FALSE)
дает мне этот сюжет:
![enter image description here]()