Seite 1 von 3
Säulendiagramm mit mehr als zwei Variablen
Verfasst: Di Nov 10, 2020 9:03 pm
von Quitter
Moin,
ich habe zwar in einem anderen Thread etwas nebenbei schon gefragt, allerdings würde ich es in diesem gern spezifisch.
Ich möchte gern ein Säulendiagramm mit mehr als zwei Variablen erstellen.
Bspw. mit "Tage" und der Wassermenge für "Frauen", "Männer" und "Kinder" - also im Grunde vier Spalten mit gleich vielen Zeilen.
Ist das irgendwie machbar und wenn ja, wie?
Ich sitze hier schon den ganzen Tag und zerbreche mir dir Kopf.
Liebe Grüße
Re: Säulendiagramm mit mehr als zwei Variablen
Verfasst: Mi Nov 11, 2020 7:54 am
von bigben
Hallo Quitter,
Vergleichende Zeitreihen sind oft viel besser mit Punkten oder Linien als mit Balkengrafiken zu machen, beispielsweise so:
Code: Alles auswählen
bsp <- data.frame( Tage = 1:5,
Frau = c(10, 20, 30, 40, 45),
Mann = c( 6, 16, 25, 32, 33),
Kind = c(19, 28, 42, 46, 50))
plot(bsp$Tage, bsp$Frau, type = "b", col =2, ylim = c(0,50),
xlab = "Tage", ylab ="Wasser")
lines(bsp$Tage, bsp$Mann, type = "b", col = 3)
lines(bsp$Tage, bsp$Kind, type = "b", col = 4)
legend("bottomright", fill = 2:4, legend =c("Frauen", "Männer", "Kinder"))
Dazu kommt noch, dass die Barplot-Funktion in base graphics ungewöhnlich bzw gewöhnungsbedürftig ist. Sie nimmt beispielsweise lieber Matrizen als Dataframes. Mal als Ausgangpunkt:
Code: Alles auswählen
bsp <- data.frame( Frau = c(10, 20, 30, 40, 45),
Mann = c( 6, 16, 25, 32, 33),
Kind = c(19, 28, 42, 46, 50))
barplot(t(as.matrix(bsp)))
Wenn man anspruchsvoll ist und es ausgerechnet um Balkengrafiken geht lohnt sich ggf auch ggplot2:
http://www.sthda.com/english/wiki/ggplo ... ualization
LG,
Bernhard
Re: Säulendiagramm mit mehr als zwei Variablen
Verfasst: Mi Nov 11, 2020 10:27 am
von Quitter
Hallo Bernhard,
danke für deine Antwort.
Mit dem Plot hat es funktioniert. Ich habe auch erst überlegt die Daten in einem Liniendiagramm zu visualisieren. Allerdings weisen viele Punkte den selben Wert auf, sodass es eher eine einfarbige Linie mit ein paar andersfarbigen Ausreißern werden würde.
Das erstellen des Barplot hat soweit mit der Matrize geklappt, allerdings werden bei beside=TRUE die ersten drei Balken nicht als "1" zusammengefasst.
Mit ggplot2 habe ich mit gestern schon etwas auseinandergesetzt. Deinen Link schaue ich mir allerdings nochmal an, vielleicht klappt es ja auch damit.
Vielen Dank schonmal!
Edit: Ok, ein Säulendiagramm mit 50 Tagen und jeweils 3 Werten nebeneinander ist glaub ich zu groß

das wären ja 150 Säulen auf der x-Achse.
Vielleicht sollte ich die Verläufe einfach einzeln in Liniendiagrammen oder Barplots darstellen, oder eben gestaffelt.
Liebe Grüße
Frederik
Re: Säulendiagramm mit mehr als zwei Variablen
Verfasst: Mi Nov 11, 2020 10:36 am
von bigben
Hallo Frederik,
Quitter hat geschrieben: Mi Nov 11, 2020 10:27 amDas erstellen des Barplot hat soweit mit der Matrize geklappt, allerdings werden bei beside=TRUE die ersten drei Balken nicht als "1" zusammengefasst.
Das kann ich nicht nachvollziehen. Dieser Code:
Code: Alles auswählen
bsp <- data.frame( Frau = c(10, 20, 30, 40, 45),
Mann = c( 6, 16, 25, 32, 33),
Kind = c(19, 28, 42, 46, 50))
barplot(t(as.matrix(bsp)), beside = TRUE, names.arg = 1:5)
ergibt bei mir dieses Bild:
LG,
Bernhard
Re: Säulendiagramm mit mehr als zwei Variablen
Verfasst: Mi Nov 11, 2020 10:48 am
von Quitter
Moin,
danke. Den Befehl "names.arg" wusste ich nicht
Jetzt hab ich alles zusammen denke ich. Ich probiere einfach mal aus.
Liebe Grüße
Frederik
Re: Säulendiagramm mit merh als zwei Variablen
Verfasst: Mi Nov 11, 2020 10:57 am
von bigben
names.arg und weitere Argumente, mit denen man die Funktion barplot() steuern kann stehen in den eingebauten Hilfeseiten, aufrufbar in R mit
LG,
Bernhard
Re: Säulendiagramm mit mehr als zwei Variablen
Verfasst: Mi Nov 11, 2020 4:41 pm
von EDi
Edit: Ok, ein Säulendiagramm mit 50 Tagen und jeweils 3 Werten nebeneinander ist glaub ich zu groß

das wären ja 150 Säulen auf der x-Achse.
Vielleicht sollte ich die Verläufe einfach einzeln in Liniendiagrammen oder Barplots darstellen, oder eben gestaffelt.
In ggplot gibt's sogenannte facets. Sicherlich mal einen Blick Wert...
Re: Säulendiagramm mit mehr als zwei Variablen
Verfasst: Mi Nov 11, 2020 5:21 pm
von Quitter
Moin,
langsam läuft es besser.
Eine Sache habe ich allerdings "grind()" setzt sich bei mir immer in den Vordergrund - also vor Punkte, Boxplots etc.
Kann man das irgendwie ändern?
Liebe Grüße
Re: Säulendiagramm mit mehr als zwei Variablen
Verfasst: Mi Nov 11, 2020 5:24 pm
von bigben
Moin, was ist grind()?
Das Edit, auf das EDi sich bezieht, hatte ich glatt übersehen. Ich bleibe bei Liniendiagrammen und wenn es oft zu ähnlichen oder gleichen Werten kommt, dann muss man halt teiltransparente Farben nehmen und zum Ausgleich etwas breitere Linien. Als Ausgangspunkt für eigene Experimente vielleicht sowas:
Code: Alles auswählen
time <- 1:50
f <- .1 * time + .8*cos(.3*time)
m <- f + .5*cos(.1*time) + .01*time
k <-jitter((f + m)/2)
plot(f ~ time, type = "p", col ="white")
lines( f ~ time, type = "p", col = '#FF000044', pch = 16)
lines( f ~ time, type = "l", col = '#FF000044', lwd = 4)
lines( m ~ time, type = "p", col = '#00FFFF44', pch = 16)
lines( m ~ time, type = "l", col = '#00FFFF44', lwd = 4)
lines( k ~ time, type = "p", col = '#0000FF44', pch = 16)
lines( k ~ time, type = "l", col = '#0000FF44', lwd = 4)
legend("topleft", fill = c('#FF000044', '#00FFFF44','#0000FF44'),
legend = c("Frauen", "Männer", "Blagen"), inset = .02)
Letztlich muss man sich das aber mit den tatsächlichen Daten anschauen und damit spielen.
LG,
Bernhard
Re: Säulendiagramm mit mehr als zwei Variablen
Verfasst: Mi Nov 11, 2020 5:42 pm
von Quitter
Moin,
grid() (ohne "n"

) sind Gitternetzlinien für die Orientierung bzw. besseres Ablesen hab ich gedacht.
Deinen Tipp werde ich mal ausprobieren, danke.
Ich habe sonst aber auch eine zweite Variante in der ich mit mfrow() das Plot Area 3-geteilt habe. So gehts auch denke ich.
Liebe Grüße