Säulendiagramm mit mehr als zwei Variablen
Säulendiagramm mit mehr als zwei Variablen
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
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
Hallo Quitter,
Vergleichende Zeitreihen sind oft viel besser mit Punkten oder Linien als mit Balkengrafiken zu machen, beispielsweise so:
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:
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
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"))
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)))
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Säulendiagramm mit mehr als zwei Variablen
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
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
Zuletzt geändert von Quitter am Mi Nov 11, 2020 10:45 am, insgesamt 1-mal geändert.
Re: Säulendiagramm mit mehr als zwei Variablen
Hallo Frederik,
ergibt bei mir dieses Bild:
LG,
Bernhard
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)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Säulendiagramm mit mehr als zwei Variablen
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
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
names.arg und weitere Argumente, mit denen man die Funktion barplot() steuern kann stehen in den eingebauten Hilfeseiten, aufrufbar in R mit
LG,
Bernhard
Code: Alles auswählen
help("barplot")
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Säulendiagramm mit mehr als zwei Variablen
In ggplot gibt's sogenannte facets. Sicherlich mal einen Blick Wert...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.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Säulendiagramm mit mehr als zwei Variablen
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
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
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:
Letztlich muss man sich das aber mit den tatsächlichen Daten anschauen und damit spielen.
LG,
Bernhard
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)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Säulendiagramm mit mehr als zwei Variablen
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
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