Пять коробчатых графиков в одном ggplot - PullRequest
0 голосов
/ 06 мая 2020

Я хочу сделать пять коробчатых диаграмм временных рядов (фрейм данных) в одном ggplot. Это возможно?

Вот как я делал до сих пор, создавая по одному, а затем я могу разместить их рядом с plot_grid.

BoxAAPL <- ggplot(oldandnew, aes(y = oldandnew[,2])) + 
  geom_boxplot() +
  xlab("") + 
  ylab("Daily Return %") +
  theme_classic() 

Но возможно ли их все на одном участке? То есть для каждого из: "AAPL, not cleaned","AAPL, cleaned","GE","SPY","WMT"? Отсюда http://www.sthda.com/english/wiki/ggplot2-box-plot-quick-start-guide-r-software-and-data-visualization Я вижу, что мне нужно перейти с numeri c на factor, но для меня это не имеет смысла. Может быть, потому что это данные временного ряда?

Образец данных:

structure(list(Date = structure(c(10960, 10961, 10962, 10963, 
10966), class = "Date"), `AAPL, not cleaned` = c(-8.810021, 1.45281, 
-9.051401, 4.628075, -1.774445), `AAPL, cleaned` = c(-8.810021, 
1.45281, -9.051401, 4.628075, -1.774445), GE = c(-4.08219945, 
-0.17376199, 1.32681098, 3.7986923, -0.03966156), SPY = c(-3.989133, 
0.1787311, -1.620197, 5.645238, 0.3424661), WMT = c(-3.813763, 
-2.360084, 1.391327, 7.280618, -1.841673)), row.names = c(NA, 
5L), class = "data.frame")

Надеюсь, вы мне поможете.

1 Ответ

1 голос
/ 06 мая 2020

Это легко сделать с помощью ggplot, но ggplot ожидает, что данные будут иметь каждое наблюдение в отдельной строке data.frame.

Это тот же подход, который рекомендуется в одном из ответов на один из ваших предыдущих вопросов.

Следовательно, нам нужно сначала выполнить преобразование данных. Мы можем использовать pivot_longer из tidyr, чтобы сделать это, и мы можем использовать аргумент выбора -Date, чтобы указать ему развернуть все столбцы, кроме Date. По умолчанию имена столбцов перемещаются в столбец name, а значения - в value.

Затем мы говорим ggplot сгруппировать значения по name и изменить их цвета в вызове aes.

library(dplyr)
library(tidyr)
library(ggplot2)
oldandnew %>%
  pivot_longer(-Date) %>%
  ggplot(aes(y=value, x=name, fill=name)) +
     geom_boxplot() +
     xlab("") + 
     ylab("Daily Return %") +
     theme_classic() 

enter image description here

...