Couleur spécifique au facteur sur une facette enveloppe GGPLOT

voix
0

parcelle de colonne que je voudrais couleur selon la saison , je voudrais préciser la couleur pour la saison (printemps / automne) dans un terrain aux multiples facettes du nombre et la date. J'ai données dans ce format:

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)

Cela me donne un terrain comme dans l'image ci-dessous.

entrez

Je voudrais colorer les barres en fonction de la saison et a tenté cela en utilisant: Season = c(spring, Summer, Spring......)mais il en est résulté un message d'avertissement:

attributs ne sont pas identiques entre les variables de mesure; ils seront supprimés

... Je suis un peu perdu!

Merci à l'avance si vous êtes en mesure d'aider

Créé 19/12/2018 à 14:18
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

J'ai une idée de ce que vous voulez dire et où votre problème. Pour moi , il semble que vous luttez avec faire une nouvelle saison colonne. Même si je me trompe , il était amusant d'exercer un peu.

Pour me faire une fonction pour vérifier, en quelle saison la date dans votre bloc de données est, est la clé. Après avoir chargé les deux paquets nécessaires tidyverse et reshape2 , la date de début pour le printemps, l' été, l' automne et l' hiver sont définis, suivis par une fonction qui rend le contrôle mentionnée ci - dessus. Cette fonction est ensuite utilisée pour créer une nouvelle colonne saison .

Cette fonction profite du paquet lubridate qui est inclus dans tidyverse .

Avec fondu ce cadre de données sont ensuite transférées avec les id.vars de date et la saison . ggplot fait alors un graphique à barres avec geom_col que je crois à ce que vous recherchez. La nouvelle trame de données devrait vous donner une bonne plate - forme pour créer d' autres versions d'un complot.

Comme vos données d'origine ne contient que les dates au printemps ou à l'automne, j'ai changé une date à une date d'été pour la vérification

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()

Et voici ma sortie entrez la description d'image ici

Espérons que cela est ce que vous recherchez.

Créé 19/12/2018 à 19:12
source utilisateur

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