Добавление легенды в ggplot2 - PullRequest
2 голосов
/ 28 мая 2019

Я пытаюсь добавить легенду к своим графикам ggplot2, но она не работает. Также команда show.legend ничего не меняет

После ответа на этот вопрос ( Добавление ручной легенды в ggplot ) я попробовал scal_colour_manueal, но это не сработало

library(ggplot2)
library(data.table)

color1 = "#D30F4B"
color2 = "#66B512"

data= data.frame(Week = rep(1:5,2), kpi = rep(c("Var1", "Var2"), each=5), value = runif(10), value2 = c(runif(5), rep(NA,5))  )

ggp <- ggplot( data = data, aes( x = Week, y = value, group = kpi) ) +
  geom_line(color=color1, show.legend = T) 

ggp <- ggp +
geom_line( mapping = aes( x = Week, y = value2, group = kpi), colour = color2 , show.legend = T) 

ggp <- ggp +  
  facet_wrap( kpi ~ . , ncol = 1) +
  scale_colour_manual(name="Legend", values=c(color1, color2))

plot(ggp)

Как добавить легенду к этому сюжету?

Ответы [ 3 ]

4 голосов
/ 28 мая 2019

Вы не должны устанавливать цвета вне aes, если хотите, чтобы они зависели от некоторой переменной фрейма данных.

library(ggplot2)
library(data.table)

color1 = "#D30F4B"
color2 = "#66B512"

data= data.frame(Week = rep(1:5,2), kpi = rep(c("Var1", "Var2"), each=5), value = runif(10), value2 = c(runif(5), rep(NA,5))  )

ggp <- ggplot( data = data, aes( x = Week, y = value, col= kpi) ) +
  geom_line(show.legend = T) 

ggp <- ggp +
geom_line( mapping = aes( x = Week, y = value2, col= kpi), show.legend = T) 

ggp <- ggp +  
  facet_wrap( kpi ~ . , ncol = 1) +
  scale_colour_manual(name="Legend", values=c(color1, color2))

plot(ggp)

plot

3 голосов
/ 28 мая 2019

Еще один совет: ggplot работает лучше всего, когда данные «аккуратны» (см., Например, «1001 * R» для «Науки о данных» Хэдли Уикхема).Тогда решение может выглядеть следующим образом (gather -колл изменяет / убирает данные так, чтобы они лучше подходили для ggplot):

library(tidyverse)
library(ggplot2)
library(data.table)

color1 = "#D30F4B"
color2 = "#66B512"

data= data.frame(Week = rep(1:5,2), kpi = rep(c("Var1", "Var2"), each=5), value = runif(10), value2 = c(runif(5), rep(NA,5))  )

data <- gather(data, key = value_name, value = value, -Week, -kpi) ## tidy the data with "gahter"

ggplot(data, aes(x = Week, y = value, colour = value_name, group = value_name)) +
    geom_line() +
    facet_wrap(kpi ~ ., ncol = 1) +
    scale_colour_manual(name="Legend", values=c(color1, color2))
2 голосов
/ 28 мая 2019

Мы могли бы иметь два geom_line с соответствующими цветами и затем использовать facet_wrap

library(ggplot2)

ggplot(data) + 
  aes(x = Week, y = value2, group = kpi, colour = color2) +
  geom_line() +
  geom_line(aes( x = Week, y = value, group = kpi, color = color1)) + 
  facet_wrap( kpi ~ . , ncol = 1) +
  scale_colour_manual(name="Legend", values=c(color1, color2))

enter image description here

...