Подтвердить что ты не робот

Удалить строки из цвета и заполнить легенды

У меня есть сюжет с тремя разными легендами: один для 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)))

Это удаляет цвет, но линии все еще существуют.

Спасибо заранее!

4b9b3361

Ответ 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