Дискретная и непрерывная легенда на одном сюжете для ggplot2 - PullRequest
0 голосов
/ 07 июня 2018

Я делаю сюжет, который показывает три разных типа.Один из типов имеет непрерывное число отклонений, поэтому он отображается с использованием непрерывной цветовой шкалы.Два других типа имеют свои собственные цвета.

Я могу только показать легенду для непрерывного типа, а не для двух отдельных типов.Я попытался использовать совет здесь , но получил сообщение

Предупреждение: игнорирование неизвестной эстетики: заполните

Как получить легенду для обоихсплошные и дискретные линии?

library(tidyverse)
library(ggplot2)

type1 <- tibble(y = rep(1:10, each = 20 ), x =  rep(1:20, times = 10), type = rep(1:10, each = 20 ) %>% as.character)

type2 <- tibble(y = seq(from = 0.5, to = 10, by=0.5), x = 1:20, type = "A")
type3 <- tibble(y = seq(from = 10, to = 0.5, by=-0.5), x = 1:20, type = "B")

 type1 %>% #need to remove infinte values 
    ggplot(aes(x, y, group = type)) + 
   geom_line(aes(colour = y)) +  
   scale_colour_gradientn(colors = c("red",   "limegreen"), name = "Type1 value") +
   geom_line(data = type2, 
             aes(x,y)) +
   geom_line(data = type3, 
             aes(x, y), colour = "blue" ) 

Сюжет выглядит так.Мне нужен тот же график, но с дополнительной легендой, которая показывает черный для типа 2 и синий для типа 3. Таким образом, легенда будет представлять собой смесь дискретной и непрерывной.enter image description here

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

ОК, поэтому совершенно новый ответ:

вот оно:

type1 %>% #need to remove infinte values 
  ggplot(aes(x, y, group = type)) + 
  geom_line(aes(colour = y), show.legend = TRUE) +  
  scale_colour_gradientn(colors = c("red",   "limegreen"), name = "Type1 value") +
  geom_line(data = type2, 
        aes(x,y, fill = 'type2'), color = 'black') +
  geom_line(data = type3, 
        aes(x, y, fill = 'type3'), color = 'blue') +
  scale_fill_manual("Types", values=c(1, 1),
        guide=guide_legend(override.aes = list(colour=c("black", "blue")))
  )

enter image description here

Это немногоОбходной обходной путь, но он делает свою работу

В основном вы используете show.legend, чтобы получить первую легенду, и fill, чтобы вызвать вторую легенду (поэтому игнорируйте предупреждение, потому что очевидно, что заполнять нечеголиния), а затем guide_legend позволяет добавить цвета к легенде

0 голосов
/ 07 июня 2018

Не совсем точно, какой желаемый результат равен

, например, вот так:

type1 %>% #need to remove infinte values 
  ggplot(aes(x, y, group = type)) + 
  geom_line(aes(color = 'type1')) +
  geom_line(data = type2, aes(x,y, color='type2'))  +
  geom_line(data = type3, aes(x, y, color='type3'))  

enter image description here

или

 type1 %>% #need to remove infinte values 
  ggplot(aes(x, y, group = type)) + 
  geom_line(aes(color = type), show.legend = TRUE) +
  geom_line(data = type2, aes(x,y, color='type2'), show.legend = TRUE)  +
  geom_line(data = type3, aes(x, y, color='type3'), show.legend = TRUE) 

enter image description here

или это что-то совершенно другое

...