Schleifen: Grafiken erstellen und individuell speichern
Verfasst: Mi Apr 12, 2017 3:38 pm
Hallo,
ich habe zwei (vorerst, später werden es noch mehr) data.frames mit den geschmeidigen Namen GRCYPT_flows und ESIEIT_flows. Beide enthalten genau dieselben Variablen, nämlich report_ctry, partner_ctry, indicator, year, value.
Ich möchte nun für beide frames dieselbe Grafik erstellen und unter zwei verschiedenen Namen abspeichern. Anstatt zweimal denselben Code zu schreiben, ist es natürlich bequemer, eine Schleife zu benutzen. Hier stehe ich allerdings vor dem Problem, dass ich es nicht hinbekomme R zu sagen, dass es mir die Grafiken in zwei verschiedenen listen mit unterschiedlichen Namen abspeichert. Ich habe hier selbst schon mit der foreach-Schleife hantiert:
Hier bin ich noch nichtmal so weit gekommen, etwas speichern zu können, da hier schon eine Fehlermeldung auftaucht: task 1 failed - "ggplot2 doesn't know how to deal with data of class factor".
Auf stack overflow habe ich den folgenden Lösungsent empfohlen bekommen:
Das funktioniert soweit erstmal, allerdings werden alle plots in my_plot gespeichert. Ich hätte das aber gerne in zwei verschiedenen Listen. Deswegen hilft mir auch der entsprechende Thread im FAQ-Bereich leider nicht weiter, denn dort geht es auch darum, die Informationen aus jeder Iteration in einer Variablen zu speichern.
Oder noch einmal anders formuliert. Ich würde gerne das folgende in einem Schleifen-Befehl zusammenfassen:
Womöglich ist das Problem gar nicht so schwer zu lösen. In Stata würde das mit foreach jedenfalls ziemlich easy funktionieren. Aber R ist für Neueinsteiger wie mich leider sehr viel schwieriger zugänglich.
ich habe zwei (vorerst, später werden es noch mehr) data.frames mit den geschmeidigen Namen GRCYPT_flows und ESIEIT_flows. Beide enthalten genau dieselben Variablen, nämlich report_ctry, partner_ctry, indicator, year, value.
Ich möchte nun für beide frames dieselbe Grafik erstellen und unter zwei verschiedenen Namen abspeichern. Anstatt zweimal denselben Code zu schreiben, ist es natürlich bequemer, eine Schleife zu benutzen. Hier stehe ich allerdings vor dem Problem, dass ich es nicht hinbekomme R zu sagen, dass es mir die Grafiken in zwei verschiedenen listen mit unterschiedlichen Namen abspeichert. Ich habe hier selbst schon mit der foreach-Schleife hantiert:
Code: Alles auswählen
foreach (i=c(GRCYPT_flows, ESIEIT_flows)) %do% {
ggplot(i, aes(year, value)) +
geom_line(aes(colour=partner_ctry, linetype=indicator)) + facet_wrap(~report_ctry) +
theme(axis.text.x=element_text(angle=90, vjust=0.5)) +
scale_x_continuous(breaks=seq(2002, 2012, 2), name="") +
scale_y_continuous(name="Billion Euros") +
scale_colour_discrete(breaks=c("EA19", "ROW_NON_EA19"), labels=c("EA19", "Extra-EA19")) +
scale_linetype_discrete(breaks=c("EA19", "ROW_NON_EA19"), labels=c("Trade", "Capital")) +
theme(legend.title=element_blank())
}
Auf stack overflow habe ich den folgenden Lösungsent empfohlen bekommen:
Code: Alles auswählen
my_data <- list(GRCYPT_flows, ESIEIT_flows)
my_plot <- lapply(my_data, function(i) {
ggplot(i, aes(year, value)) +
geom_line(aes(colour=partner_ctry, linetype=indicator)) + facet_wrap(~report_ctry) +
theme(axis.text.x=element_text(angle=90, vjust=0.5)) +
scale_x_continuous(breaks=seq(2002, 2012, 2), name="") +
scale_y_continuous(name="Billion Euros") +
scale_colour_discrete(breaks=c("EA17", "ROW_NON_EA17"), labels=c("EA17", "Extra-EA17")) +
scale_linetype_discrete(breaks=c("EA17", "ROW_NON_EA17"), labels=c("Trade", "Capital")) +
theme(legend.title=element_blank())
})
Oder noch einmal anders formuliert. Ich würde gerne das folgende in einem Schleifen-Befehl zusammenfassen:
Code: Alles auswählen
plot1a <- ggplot(GRCYPT_flows,aes(year,value)) +
geom_line(aes(colour=partner_ctry,linetype=indicator)) + facet_wrap(~report_ctry) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
scale_x_continuous(breaks=seq(2002, 2012, 2), name="") +
scale_y_continuous(name="Billion Euros") +
scale_colour_discrete(breaks=c("EA19","ROW_NON_EA19"), labels=c("EA19","Extra-EA19")) +
scale_linetype_discrete(breaks=c("TRADE_IM","VALUE"), labels=c("Trade","Capital")) +
theme(legend.title=element_blank())
plot1b <- ggplot(ESIEIT_flows,aes(year,value)) +
geom_line(aes(colour=partner_ctry,linetype=indicator)) + facet_wrap(~report_ctry) +
theme(axis.text.x=element_text(angle=90,vjust=0.5)) +
scale_x_continuous(breaks=seq(2002,2012,2),name="") +
scale_y_continuous(name="Billion Euros") +
scale_colour_discrete(breaks=c("EA19","ROW_NON_EA19"), labels=c("EA19","Extra-EA19")) +
scale_linetype_discrete(breaks=c("TRADE_IM","VALUE"), labels=c("Trade","Capital")) +
theme(legend.title=element_blank())