Barplot mit unterschiedlichen Säulenfarben

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
Tobi
Beiträge: 3
Registriert: Sa Mai 09, 2020 12:52 am

Barplot mit unterschiedlichen Säulenfarben

Beitrag von Tobi »

Hallo liebe R-Community,

ich arbeite seit über einem Jahr hin und wieder mit RStudio, seit wenigen Monaten beschäftige ich mich intensiver damit. Ich bin also doch immernoch ein relativer Anfänger. Vor einigen Tagen bin ich auf etwa gestoßen, woran ich mir buchstäblich die Zähne ausbeise. Vielleicht hat ja einer von euch eine hilfreiche Idee für mich.
Beispiel: Über 4 Monate hinweg wurde jeden Tag an einem bestimmten Ort die Temperatur gemessen. Die beiden Variablen (Temperatur und Monat) sind in einer Tabelle mit 2 Spalten und. ca. 120 Reihen. Die 1. Spalte = Temperatur, die 2. Spalte = Monat. Der Monat ist also eine Variable, kann aber 4 Werte annehmen (der Monat ist angegeben mit 1,2,3,4). Ich möchte gerne einen barplot erstellen mit 4 verschiedenen Farben. Wobei alle Temperaturen aus Monat 1 als "schwarz" dargestellt sind, Temperaturen aus Monat 2 als "rot", alle Temperaturen aus Monat 3 "grün" und alle Temperaturen aus Monat 4 "blau". Vielleicht ist die Lösung dazu ja garnicht so schwer, ich steh aber trotzdem voll auf dem Schlauch.
Falls ihr eine Idee hättet wäre mir wirklich sehr geholfen.
Liebe Grüße
Tobias
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Barplot mit unterschiedlichen Säulenfarben

Beitrag von bigben »

Hallo Tobias,

soll das ein Balken pro Messung werden oder vier Balken, die den Durschnitt je eines Monats repräsentieren?

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Tobi
Beiträge: 3
Registriert: Sa Mai 09, 2020 12:52 am

Re: Barplot mit unterschiedlichen Säulenfarben

Beitrag von Tobi »

Hallo Bernhard,

danke für deine Antwort! Die Idee ist, dass jede Messung ein Balken ist. Also quasi ca. 120 Messungen (= 120 Balken) auf der x-Achse. Die y-Achse bildet die Temperatur ab. Und um zu zeigen welche Messung aus Monat1, Monat2, Monat3 und Monat4 kommt würde ich gerne die 120 Balken in 4 Farben unterteilen.
Liebe Grüße
Tobi
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Barplot mit unterschiedlichen Säulenfarben

Beitrag von bigben »

Am einfachsten ist die plot-Funktion:

Code: Alles auswählen

farben <- c("black", "darkred", "darkgreen", "blue" )
messung <- data.frame(monat = gl(4,30,labels=c("Mai", "Juni", "Juli", "August")),
                      temp = runif(120, 15, 25))
plot(messung$temp, col = farben[messung$monat], type="h",
     xlab="Zeit", ylab="Temperatur", ylim=c(0,25))
legend("bottomleft",inset = .05, fill=farben, legend = levels(messung$monat))
Sehr elegant, wenn damit noch mehr gemacht werden soll, sind die Grafiken mit dem Paket ggplot2:

Code: Alles auswählen

messung <- data.frame(id = 1:120,
                      monat = gl(4,30,labels=c("Mai", "Juni", "Juli", "August")),
                      temp = runif(120, 15, 25))

library(ggplot2)
ggplot(messung) +
  geom_bar(aes(x = id, y = temp, fill = monat), stat = "identity", width =.2) +
  scale_fill_manual(values = c("black", "darkred", "darkgreen", "blue" ))
Das ist dann sehr flexibel und kann z. B. auch so aussehen:

Code: Alles auswählen

ggplot(messung) +
  geom_bar(aes(x = id, y = temp, fill = monat), stat = "identity", width =1) +
  scale_fill_manual(values = c("black", "darkred", "darkgreen", "blue" )) +
  theme_light()+
  theme(legend.position="bottom") +
  xlab("Zeit in Tagen") + 
  ylab("Temperatur")
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Tobi
Beiträge: 3
Registriert: Sa Mai 09, 2020 12:52 am

Re: Barplot mit unterschiedlichen Säulenfarben

Beitrag von Tobi »

Hey Bernhard,

deine Antwort hat mir schon ganz gut geholfen. Leider ist es so, dass ich einen schon bestehenden Datensatz habe. Aus diesem Grund würde die gl-function glaube ich nicht funktionieren.
Ich habe einfach mal eine Datei angehängt im Textformat um zu zeigen wie die Daten ca. aussehen.
Ich würde gerne in einem Balkendiagramm die Temperatur abbilden (= die Balken) und mittels verschiedener Farben würde ich gerne den Monat angeben.
Der barplot-function ist mir bekannt, ich weiß auch, dass man da auch die Farben verändern kann. Ich weiß auch, dass R die Farben quasi "recycelt" deshalb würde ein Vector der Art: c("red", "green", "blue", "black") in diesem Fall wenig bewirken weil dann einfach die Farben abwechseln.
Danke nochmals für deine Hilfe!
LG Tobias
Dateianhänge
Temperatur.txt
(773 Bytes) 45-mal heruntergeladen
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Barplot mit unterschiedlichen Säulenfarben

Beitrag von bigben »

Hey Tobi,
Tobi hat geschrieben: Sa Mai 09, 2020 10:29 pmdeine Antwort hat mir schon ganz gut geholfen.
Nee, anscheinend nicht. Aus der Antwort wird nicht klar, ob Du weiter als bis zum gl gelesen hast.
Tobi hat geschrieben: Sa Mai 09, 2020 10:29 pmLeider ist es so, dass ich einen schon bestehenden Datensatz habe. Aus diesem Grund würde die gl-function glaube ich nicht funktionieren.
Leider ist es so, dass Du mit Deinem Datensatz erst jetzt um die Ecke gekommen bist, ich aber irgendwelche Daten brauchte, um Dir vorzumachen, wie man Temperaturwerte nach Monaten einfärbt. Wenn Du Dein Datenbeispiel gleich mitgeliefert hättest, hätte ich das benutzt. Jetzt musst Du den Code halt an Deine Gegebenheiten anpassen: Du erstellst natürlich keine Zufallsdaten und nutzt kein gl, sondern liest Deine Daten ein. Die beiden Variablen heißen bei Dir ein wenig anders und die Monate werden nicht von 1 bis 4, sondern von 5 bis 8 gezählt. Das versuchst Du mal selbst zu lösen und meldest Dich, wenn es nicht klappen sollte.
Ich würde gerne in einem Balkendiagramm die Temperatur abbilden (= die Balken) und mittels verschiedener Farben würde ich gerne den Monat angeben.
Ich weiß, ich habe Dir bereits drei Code-Stücke geschrieben, in denen genau das gemacht wird.
Der barplot-function ist mir bekannt
Ich bleibe zwar bei meiner Empfehlung, das mit plot oder mit ggplot2 zu machen, aber barplot funktioniert beim Einfärben quasi ganz genau so, wie ich es Dir mit plot oben vorgemacht habe:

Code: Alles auswählen

farben <- c("black", "red", "green", "blue" )
messung <- data.frame(monat = gl(4,30),
                      temp = runif(120, 15, 25))
barplot(messung$temp, col = farben[messung$monat])
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Barplot mit unterschiedlichen Säulenfarben

Beitrag von bigben »

Kurzer Nachtrag: Ich weiß ja nicht, ob das eine Hausaufgabe ist in der Du einen Barplots üben sollst. Wenn nicht das Üben, sondern die DAten im Mittelpunkt stehen, dann solltest Du überlegen, ob nicht eine Reduktion der data-ink ratio mittels eines Liniendiagramms besser aussieht als ein Barplot mit so vielen, so engen Balken. Hier ein denkbares Beispiel:
Rplot.png
Rplot.png (9.38 KiB) 667 mal betrachtet
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten