Color específico al factor en una faceta GGPLOT-wrap

votos
0

parcela columna que me gustaría color en función de la temporada me gustaría especificar el color para la temporada (primavera / otoño) en una parcela de múltiples facetas del recuento y la fecha. Tengo datos en este formato:

Date = c(06/13/2011, 10/26/2011, 05/28/2012, 11/11/2012, 05/25/2013, 10/31/2013, 06/09/2014, 11/03/2014, 05/14/2015, 10/24/2015, 05/03/2016, 10/13/2016, 05/24/2017, 10/16/2017, 06/09/2018, 10/05/2018)
Date = as.Date(Date, format = %m/%d/%Y)
y0_c = c(159375000, 29403750000, 0, 3665625000, 0, 25790000000, 0, 18636250000, 0, 13421875000, 0, 26098125000, 0, 1440625000, 82500000, 23101250000)
y1_c = c(1794375000, 313125000, 12065625000, 3148125000, 2883750000, 372500000, 2872500000, 790000000, 7604375000, 3496875000, 4042500000, 830000000, 20070000000, 10648750000, 771250000, 328750000)
y2_c = c(317500000, 42500000, 33750000, 62500000, 176875000, 331875000, 166250000, 54375000, 260000000, 116250000, 1068125000, 290000000, 438125000, 160000000, 2686250000, 1072500000)
y3_c = c(5625000, 5000000, 5625000, 1875000, 2500000, 4375000, 18125000, 7500000, 11875000, 22500000, 51250000, 37500000, 16250000, 31250000, 60000000, 38125000)

df = data.frame(Date, y0_c, y1_c, y2_c, y3_c)
df_melt = melt(df, id.vars = 'Date')

ggplot(dfc_melt, aes(x = Date, y = value)) + geom_col() + facet_wrap(~ variable, scales = 'free_y', ncol = 1)

Esto me da una trama como en la imagen de abajo.

introducir

Me gustaría dar color a las barras en función de la temporada y el intento de esta usando: Season = c(spring, Summer, Spring......)pero esto resultó en un mensaje de advertencia:

atributos no son idénticos a través de las variables de medida; que será dado de baja

... Estoy un poco perdido!

Gracias de antemano si usted es capaz de ayudar

Publicado el 19/12/2018 a las 14:18
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Tengo una idea de lo que quiere decir y donde es su problema. A mí me parece que está luchando con la fabricación de una nueva temporada de la columna. Incluso si estoy equivocado que era divertido para ejercer un poco.

Para mí hacer una función que controla, en qué estación del año de la fecha en la trama de datos está, es la clave. Después de cargar los dos paquetes necesarios tidyverse y reshape2 , la fecha de inicio de la primavera, verano, otoño e invierno se definen, seguido por una función que hace que el cheque se ha mencionado anteriormente. Esta función se utiliza para crear una nueva columna temporada .

Esta función aprovecha el paquete lubridate que se incluye en tidyverse .

Con esta fusión trama de datos se transfiere entonces con los id.vars de fecha y temporada . ggplot hace a continuación un gráfico de barras con geom_col como creo que se trata de lo que busca. El nuevo marco de datos debe darle una buena plataforma para crear otras versiones de una parcela.

A medida que los datos originales sólo contenía fechas en primavera o en otoño, he cambiado de una fecha a una fecha de verano para la comprobación

library(tidyverse)
library(reshape2)

Date = c("06/13/2011", "10/26/2011", "07/28/2012", "11/11/2012", "05/25/2013", 
   "10/31/2013", "06/09/2014", "11/03/2014", "05/14/2015", "10/24/2015", "05/03/2016", 
    "10/13/2016", "05/24/2017", "10/16/2017", "06/09/2018", "10/05/2018")
Date = as.Date(Date, format = "%m/%d/%Y")
y0_c = c(159375000, 29403750000, 0, 3665625000, 0, 25790000000, 0, 18636250000, 0, 
   13421875000, 0, 26098125000, 0, 1440625000, 82500000, 23101250000)
y1_c = c(1794375000, 313125000, 12065625000, 3148125000, 2883750000, 372500000, 
   2872500000, 790000000, 7604375000, 3496875000, 4042500000, 830000000, 20070000000, 
   10648750000, 771250000, 328750000)
y2_c = c(317500000, 42500000, 33750000, 62500000, 176875000, 331875000, 166250000, 
   54375000, 260000000, 116250000, 1068125000, 290000000, 438125000, 160000000, 
   2686250000, 1072500000)
y3_c = c(5625000, 5000000, 5625000, 1875000, 2500000, 4375000, 18125000, 7500000, 
   11875000, 22500000, 51250000, 37500000, 16250000, 31250000, 60000000, 38125000)

winterStart <- "12-21"
springStart <- "03-23"
summerStart <- "06-21"
autumnStart <- "09-21"

season <- function(d) ifelse(d > ymd(paste(year(d), springStart, sep='-' )) &
                             d < ymd(paste(year(d),summerStart, sep='-')), 'spring',
                         ifelse(d > ymd(paste(year(d), summerStart, sep='-' )) &
                                    d < ymd(paste(year(d),autumnStart, sep='-')), 'summer',
                                ifelse(d > ymd(paste(year(d), autumnStart, sep='-' )) &
                                           d < ymd(paste(year(d),winterStart, sep='-')), 'autumn','winter')))

df = data.frame(Date, y0_c, y1_c, y2_c, y3_c)
df$season <- season(df[,1])
df.melt <- melt(df, id.vars = c("Date", 'season'))
df.melt <- melt(df, id.vars = c("Date", 'season'))

ggplot(df.melt, aes(Date, value, fill=season))+geom_col()

Y aquí está mi salida introducir descripción de la imagen aquí

Espero que esto se trata de lo que busca.

Respondida el 19/12/2018 a las 19:12
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more