Seite 1 von 1

Barplot mit unterschiedlichen Säulenfarben

Verfasst: Sa Mai 09, 2020 1:23 am
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

Re: Barplot mit unterschiedlichen Säulenfarben

Verfasst: Sa Mai 09, 2020 8:25 am
von bigben
Hallo Tobias,

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

LG, Bernhard

Re: Barplot mit unterschiedlichen Säulenfarben

Verfasst: Sa Mai 09, 2020 1:28 pm
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

Re: Barplot mit unterschiedlichen Säulenfarben

Verfasst: Sa Mai 09, 2020 2:29 pm
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

Re: Barplot mit unterschiedlichen Säulenfarben

Verfasst: Sa Mai 09, 2020 10:29 pm
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

Re: Barplot mit unterschiedlichen Säulenfarben

Verfasst: So Mai 10, 2020 8:54 am
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

Re: Barplot mit unterschiedlichen Säulenfarben

Verfasst: So Mai 10, 2020 9:32 am
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) 1922 mal betrachtet
LG,
Bernhard