Изменение меток легенды при использовании нескольких переменных - PullRequest
0 голосов
/ 06 августа 2020

В R с использованием ggplot: я пытаюсь построить линейный график с несколькими столбцами в качестве отдельных переменных. Я не использую параметр fill =, поэтому знаю, почему scale_fill_discrete не работает. Из того, что я видел из других подобных вопросов, похоже, что все другие параметры (scale_colour_discrete, scale_shape_discrete и c) требуют, чтобы вы использовали эти параметры на первом этапе построения графика. Это может быть моей основной проблемой, но я не знаю, как исправить это с помощью трех разных переменных. Прямо сейчас появившаяся легенда показывает три разных цвета, но они не связаны с нужной переменной.

ggplot(summary_5yr) + 
geom_line(aes(x = Year, y = NY_Med_Inc, group = 1, color ="blue")) +
geom_line(aes(x = Year, y = FL_Med_Inc, group = 1, color = "red")) +
geom_line(aes(x = Year, y = WA_Med_Inc, group = 1, color = "green")) +
labs(title = "Median Income Trends", x = "Year", y = "Median Income (USD)")

1 Ответ

0 голосов
/ 06 августа 2020

Попробуйте это. Чтобы получить правильные цвета и легенду, вы должны использовать scale_color_manual. Использование color = "blue" внутри aes() не изменит цвет на «синий». Вместо этого «синий» - это просто своего рода метка, которой вы должны назначить цвет внутри scale_color_manual. Также. Чтобы получить правильные метки, необходимо установить метки.

Второй подход для достижения желаемого графика - это привести ваш df в формат, например, tidyr::pivot_longer. Таким образом, необходим только один слой geom_line, и вы автоматически получите правильные метки.

library(ggplot2)
library(tidyr)
library(dplyr)

set.seed(123)

summary_5yr <- data.frame(
  Year = 2010:2020,
  NY_Med_Inc = runif(11, 10000, 50000),
  FL_Med_Inc = runif(11, 10000, 50000),
  WA_Med_Inc = runif(11, 10000, 50000)
)

ggplot(summary_5yr) + 
  geom_line(aes(x = Year, y = NY_Med_Inc, group = 1, color ="blue")) +
  geom_line(aes(x = Year, y = FL_Med_Inc, group = 1, color = "red")) +
  geom_line(aes(x = Year, y = WA_Med_Inc, group = 1, color = "green")) +
  scale_color_manual(values = c(blue = "blue", red = "red", green = "green"),
                     labels = c(blue = "NY_Med_Inc", red = "FL_Med_Inc", green = "WA_Med_Inc")) +
  labs(title = "Median Income Trends", x = "Year", y = "Median Income (USD)")

summary_5yr %>% 
    tidyr::pivot_longer(-Year, names_to = "var", values_to = "value") %>% 
    ggplot() + 
    geom_line(aes(x = Year, y = value, group = var, color = var)) +
    scale_color_manual(values = c(NY_Med_Inc = "blue", FL_Med_Inc = "red", WA_Med_Inc = "green")) +
    labs(title = "Median Income Trends", x = "Year", y = "Median Income (USD)")

...