Невозможно добавить легенду в таблицу временных рядов - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь добавить легенду к графику временных рядов, и до сих пор не смог получить какую-либо тягу.Ниже приведен рабочий код, который объединяет три ряда экономических данных в одну диаграмму и применяет несколько изменений, чтобы получить желаемый формат / общую эстетику.Я также должен добавить, что график представляет собой график изменения квартальных данных за год.

Мне удалось найти примеры людей, использующих scale_colour_manual для добавления легенды - я предоставил код, который я собрал ниже.

В идеале, легенда должна просто отображатьсясправа от графика с цветом и линейной диаграммой.

Любая помощь будет принята с благодарностью!

library(quantmod)
library(TTR)
library(ggthemes)
library(tidyverse)

Nondurable <- getSymbols("PCND", src = "FRED", auto.assign = F)
Nondurable$chng <- ROC(Nondurable$PCND,4)
Durable <- getSymbols("PCDG", src = "FRED", auto.assign = F)
Durable$chng <- ROC(Durable$PCDG,4)
Services <- getSymbols("PCESV", src = "FRED", auto.assign = F)
Services$chng <- ROC(Services$PCESV, 4)

ggplot() +
  geom_line(data = Nondurable, aes(x = Index, y = chng), color = "#5b9bd5", size = 1, linetype = "solid") +
  geom_line(data = Durable, aes(x = Index, y = chng), color = "#00b050", size = 1, linetype = "longdash") +
  geom_line(data = Services, aes(x = Index, y = chng), color = "#ed7d31", size = 1, linetype = "twodash") +
  theme_tufte() + 
  scale_y_continuous(labels = percent, limits = c(-0.01,.09)) +
  xlim(as.Date(c('1/1/2010', '6/30/2019'), format="%d/%m/%Y")) + 
  labs(y = "Percent Change", x = "", caption = "Seasonally Adjusted Annual Rate. Retrieved from FRED & U.S. Bureau of Economic Analysis") +
  ggtitle("Year-over-Year Spending Trend Changes of the US Consumer") +
  scale_colour_manual(name = 'Legend', 
                      guide = 'legend',
                      values = c('Nondurable' = '#5b9bd5',
                                 'Durable' = '#00b050',
                                 'Services' = '#ed7d31'), 
                      labels = c('Nondurable',
                                 'Durable',
                                 'Services'))

При запуске программы я получаю следующие предупреждающие сообщения (хотя график все еще отображается).

Warning messages:
1: Removed 252 rows containing missing values (geom_path). 
2: Removed 252 rows containing missing values (geom_path). 
3: Removed 252 rows containing missing values (geom_path).

1 Ответ

0 голосов
/ 18 мая 2019

Есть две причины, по которым вы получаете эту ошибку:

  1. Основная масса удаляется из-за ваших ограничений. Когда вы используете xlim() или scale_y_continuous(..., limits = ...), ggplot удаляет значения, выходящие за эти пределы, из ваших данных перед построением графика и отображает это предупреждение в качестве FYI. Закомментировав обе эти строки, вы все равно увидите сообщение об удаленных значениях, но с гораздо меньшим числом. Это потому что
  2. у вас есть NA значений в первых 4 строках столбца chng. Это верно для всех 3 наборов данных.

Чтобы шкалы отображались, вам нужно поместить что-то, отличающее линии в aes(), как в aes(..., color = "Nondurable"). Посмотрите, подходит ли вам это решение:

ggplot() +
  geom_line(data = Nondurable, aes(x = Index, y = chng, color = "Nondurable"), size = 1, linetype = "solid") +
  geom_line(data = Durable, aes(x = Index, y = chng, color = "Durable"), size = 1, linetype = "longdash") +
  geom_line(data = Services, aes(x = Index, y = chng, color = "Services"), size = 1, linetype = "twodash") +
  theme_tufte() +
  labs(
    y = "Percent Change", 
    x = "", 
    caption = "Seasonally Adjusted Annual Rate. Retrieved from FRED & U.S. Bureau of Economic Analysis"
  ) +
  ggtitle("Year-over-Year Spending Trend Changes of the US Consumer") +
  scale_colour_manual(
    name = "Legend",
    values = c("#5b9bd5","#00b050","#ed7d31"),
    labels = c("Nondurable", "Durable", "Services"
    )
  ) +
  scale_x_date(limits = as.Date(c("2010-01-01", "2019-02-01")))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...