Kolor specyficzny czynnik na ggplot aspekt-oblewania

głosy
0

kolumna fabuła, że chciałbym, aby kolor w zależności od sezonu chciałbym określić kolor sezonu (wiosna / jesień) w multi fasetowanie działce liczby i daty. Mam dane w następującym formacie:

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)

To daje mi działkę jak na obrazku poniżej.

wprowadzić

Chciałbym kolor prętów w zależności od sezonu i próbował to za pomocą: Season = c(spring, Summer, Spring......)ale spowodowało to komunikat ostrzegawczy:

atrybuty nie są identyczne w całej zmiennych pomiarowych; będą spadła

... Jestem nieco utracone!

Dzięki z góry, jeśli jesteś w stanie pomóc

Utwórz 19/12/2018 o 14:18
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Mam pomysł, co masz na myśli i gdzie jest twój problem. Wydaje mi się, mają trudności z podjęciem nowego sezonu kolumnę. Nawet jeśli się mylę to była zabawa do wykonywania trochę.

Dla mnie czyni to funkcja, by sprawdzić, w co sezon datę w ramce danych jest, jest kluczem. Po załadowaniu dwa niezbędne pakiety tidyverse i reshape2 , datę rozpoczęcia na wiosnę, lato, jesień i zima są zdefiniowane, a następnie funkcję, która sprawia, że wyżej wymieniony czek. Funkcja ta jest następnie wykorzystywana do tworzenia nowej kolumny sezon .

Funkcja ta korzysta z pakietu lubridate który jest zawarty w tidyverse .

Stopem tym ramka danych przenosi się następnie z id.vars z Data i pory . ggplot sprawia następnie wykres słupkowy z geom_col jak wierzę, jest tym, co szukasz. Nowa ramka danych powinno dać dobrą platformę do tworzenia innych wersji działce.

Jak oryginalny dane zawarte tylko daty wiosną lub jesienią, zmieniłem jedną datę do daty letnim do sprawdzenia

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

I tu jest moje wyjście wprowadzić opis obrazu tutaj

Mam nadzieję, że to chodzi o to, czego szukasz.

Odpowiedział 19/12/2018 o 19:12
źródło użytkownik

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