Farbe spezifische Faktor auf einem Facette-wrap GGPLOT

stimmen
0

Spalte Handlung , die Ich mag würde nach Saison einzufärben Ich mag würde Farbe für Jahreszeit (Frühling / Herbst) in einem Mehrfacetten Grundstück Zähl- und Datum angeben. Ich habe Daten in diesem 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)

Das gibt mir ein Diagramm, wie im Bild unten.

Geben

Ich mag die Bars nach der Saison färben und versuchte , dies mit: Season = c(spring, Summer, Spring......)aber in einer Warnmeldung geführt:

Attribute sind über Messvariablen nicht identisch; sie fallen gelassen werden

... Ich bin ein wenig verloren!

Vielen Dank im Voraus, wenn Sie in der Lage sind zu helfen

Veröffentlicht am 19/12/2018 um 14:18
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Ich habe eine Idee , was Sie meinen , und wo Ihr Problem ist. Mir scheint es Sie mit der Herstellung eines neuen kämpfen Saison Spalte. Auch wenn ich falsch bin , es war Spaß , ein bisschen zu trainieren.

Für mich macht eine Funktion zu überprüfen, in welcher Jahreszeit Sie das Datum in Ihrem Datenrahmen, ist der Schlüssel. Nach dem Laden der beide notwendigen Pakete tidyverse und reshape2 , das Startdatum für Frühling, Sommer, Herbst und Winter ist definiert, die durch eine Funktion gefolgt , die die oben erwähnte Überprüfung macht. Diese Funktion wird dann verwendet , um eine neue Spalte erstellen Saison .

Diese Funktion nutzt die Vorteile des Pakets lubridate , die in enthalten ist tidyverse .

Mit Schmelze wird dieser Datenrahmen dann mit dem id.vars der übertragene Datums und Saison . ggplot macht dann ein Balkendiagramm mit geom_col wie ich ist zu glauben , was Sie suchen. Der neue Datenrahmen sollten Sie eine gute Plattform , andere Versionen eines Plots zu erstellen.

Als einzige Originaldaten Daten im Frühjahr oder Herbst enthielten, änderte es zu einem Sommer Datum ein Datum für die Überprüfung

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

Und hier ist mein Ausgang Geben Sie hier image description

Hoffentlich ist das, was Sie suchen.

Beantwortet am 19/12/2018 um 19:12
quelle vom benutzer

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