Seite 1 von 1

farbige Zeitreihe

Verfasst: Sa Jan 14, 2023 1:09 pm
von retep
Hallo,

ich möchte gerne im Forum folgende Frage, mit der Bitte um Lösung stellen:

Der vorliegende Datensatz ist eine Zeitreihe des deutschen Wetterdienstes (DWD).
Die Grafik soll die Summe der monatlichen Niederschlagshöhe pro Monat für
den Zeitraum 2005 - 2021 abbilden.

Hier das Skript:

Code: Alles auswählen


library(lubridate)
library(tsbox)
library(tidyverse)
library(hrbrthemes)

Test_Data_DWD%>%
mutate(Year = as.numeric(format(MESS_DATUM, "%Y")),
       Quarter = quarters(MESS_DATUM),
       Month = month(MESS_DATUM, label = TRUE),
       Week = week(MESS_DATUM),
       Day = wday(MESS_DATUM, label = TRUE))%>%
  rename(Niederschlag = RS.Niederschlagshoehe) %>%
  select(Year, Quarter, Month, Week, Day, Niederschlag)%>%
  mutate(across(starts_with(c("Day", "Month", "Quarter")), as.factor))%>%
  mutate(Day = factor(Day, levels = c("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" ))) %>%
  group_by(Year, Month)%>%
   filter(between(Year, 2005, 2021))%>%
   summarise(
    Summe=sum(Niederschlag, na.rm = TRUE))%>%
  ggplot(aes (Month, Summe, group = Year, color = Year))+ 
  geom_line()+
  #scale_fill_brewer(palette="Paired", guide = none)+        # Fehlermeldung bei Aktivierung der Zeile
       labs(title = "Monatliche Niederschlagsumme",
       subtitle = "Zeitraum 2005 - 2021\
Stations-ID = , N= 6209",
       caption = "Data source: DWD",
       x= "Monat", y= "Monatliche Niederschlagsumme [mm]",
       tag = "")+
       theme_ipsum(base_size = 15)+
       theme(legend.position="bottom")


Soweit funktioniert alles, aber die einzelnen Zeitreihen würde ich gerne farbig abbilden.
Für jedes Jahr eine Farbe, welche möglichst deutlich voneinander unterscheidbar sein sollte.
Bei dem Versuch kommt aber eine Fehlermeldung:

Error in as.vector(x, „character") :
cannot coerce type 'closure' to vector of type 'character'

Ich ahne zwar, was der Fehler bedeutet, habe aber keinen Plan, wie ich zu
einer Lösung komme.

Vielleicht kann mir jemand hoffentlich im Forum helfen. Jede Hilfe ist willkommen!

Vielen Dank für Eure Mühe.

retep

Re: farbige Zeitreihe

Verfasst: Sa Jan 14, 2023 3:00 pm
von Athomas
Der Anhang ist ein Programm als Textdatei!?

Re: farbige Zeitreihe

Verfasst: Sa Jan 14, 2023 5:43 pm
von EDi
Error in as.vector(x, „character") :
cannot coerce type 'closure' to vector of type 'character'

Ich ahne zwar, was der Fehler bedeutet, habe aber keinen Plan, wie ich zu
einer Lösung komme.
Der Fehler kommt wenn man eine Funktion (auch 'closure' genannt) an ein argument übergibt das einen 'character' erwartet.

Meine statische Code analyse (gibt ja kein reproduzierbared beispiel), ergibt das die Fehlermeldung also durch

Code: Alles auswählen

guide = none
kommt, welches vermutlich

Code: Alles auswählen

guide = "none"
lauten sollte um keine Legende anzuzeigen.

Re: farbige Zeitreihe

Verfasst: Sa Jan 14, 2023 8:03 pm
von bigben
EDi hat geschrieben: Sa Jan 14, 2023 5:43 pm

Code: Alles auswählen

guide = none
kommt, welches vermutlich

Code: Alles auswählen

guide = "none"
lauten sollte um keine Legende anzuzeigen.
Wenn das das Problem ist, dann würde man das beim Erstellen eines ausführbares Minimalbeispiels zwangsweise lokalisieren. Sorry, musste raus.

Re: farbige Zeitreihe

Verfasst: So Jan 15, 2023 12:55 pm
von retep
Hallo Edi,

vielen Dank für die Mühe! Ich habe den Monat als character variable umgewandelt leider der Fehler ist weg aber die farbliche UNterteilung der Jahre kommt immer noch nicht:

Code: Alles auswählen


library(lubridate)
library(tsbox)
library(rdwd)
library(tidyverse)
library(hrbrthemes)

clim = rio::import("DWD_Data.txt")

clim%>%
mutate(Year = as.numeric(format(MESS_DATUM, "%Y")),
       Quarter = quarters(MESS_DATUM),
       Month = month(MESS_DATUM, label = TRUE),
       Week = week(MESS_DATUM),
       Day = wday(MESS_DATUM, label = TRUE))%>%
  rename(Niederschlag = RS.Niederschlagshoehe) %>%
  select(Year, Quarter, Month, Week, Day, Niederschlag)%>%
  mutate(across(starts_with(c("Day", "Month", "Quarter")), as.factor))%>%
  mutate(Day = factor(Day, levels = c("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" ))) %>%
  #as_tibble()
  group_by(Year, Month)%>%
  #filter (Year %in% c("2019", "2020", "2021"))%>%
  #filter(Jahr == "2018", Monat == "Nov")%>%
  filter(between(Year, 2005, 2021))%>%
   summarise(
    Summe=sum(Niederschlag, na.rm = TRUE))%>%
    mutate(across(starts_with("Month"), as.character))%>%
    ggplot(aes (Month, Summe, group = Year, color = Year))+ 
  #scale_fill_brewer(palette="Paired", guide = "none")+
  geom_line()+
       labs(title = "Monatliche Niederschlagsumme",
       subtitle = "Zeitraum 2005 - 2021\
Stations-ID = , N= 6209",
       caption = "Data source: DWD",
       x= "Monat", y= "Monatliche Niederschlagsumme [mm]",
       tag = "")+
       theme_ipsum(base_size = 15)+
       theme(legend.position="bottom")
       
der code ergibt folgende Grafik im Anhang.

Ich hätte gerne die Jahre farblich. GIbt es da eine Möglichkeit?

Vielen Dank für deine Mühe!

retep

Re: farbige Zeitreihe

Verfasst: So Jan 15, 2023 2:44 pm
von EDi
Hallo Edi,

vielen Dank für die Mühe!
Gern geschehen! Leider fehlt immernoch das reproduzierbare Beispiel.
Ich habe den Monat als character variable umgewandelt leider der Fehler ist weg aber die farbliche UNterteilung der Jahre kommt immer noch nicht:
Monat bringt dir ja nichts - du willst ja "Year" zum einfärben nutzen. Also: Year zum factor (flexibler als character) und gut ist.

Tipp nebenbei:

Trenne die Datenaufbereitung und das plotten. Das macht meiner Meinung nach den code lesbarer.

Re: farbige Zeitreihe

Verfasst: So Jan 15, 2023 4:30 pm
von retep
Gern geschehen! Leider fehlt immer noch das reproduzierbare Beispiel.
Ich habe doch den vollständigen Code inkl. Textdatei und der Importfunktion eingefügt! Zählt dies nicht als reproduzierbares Beispiel?
Monat bringt dir ja nichts - du willst ja "Year" zum einfärben nutzen. Also: Year zum factor (flexibler als character) und gut ist.
Hat funktioniert! Vielen Dank für die schnelle Hilfe!

VG

retep

Re: farbige Zeitreihe

Verfasst: So Jan 15, 2023 4:36 pm
von bigben
retep hat geschrieben: So Jan 15, 2023 12:55 pmder code ergibt folgende Grafik im Anhang.

Ich hätte gerne die Jahre farblich. GIbt es da eine Möglichkeit?
Die Jahre sind ja farblich markiert, aber eben als Farbverlauf von schwarz nach blau. Ggplot2 erkennt, dass Year einen Zahlenwert darstellt und versucht, durch den Farbgradienten die Reihenfolge zu erhalten. Du kannst entweder versuchen, durch eine bessere Farbpalette mehr Kontrast schaffen, oder auf den Gradienten zugunsten deutlicherer Farbunterschiede verzichten. Dazu dienst EDis Vorschlag, die Jahreszahlen in einen Factor umzuwandeln. Danach hast Du viel mehr Kontrast, siehst den Farben aber nicht mehr an, welche Kurven aus "nahen" oder "entfernten" Jahren stammen.

LG,
Bernhard

Re: farbige Zeitreihe

Verfasst: So Jan 15, 2023 4:40 pm
von bigben
retep hat geschrieben: So Jan 15, 2023 4:30 pm Ich habe doch den vollständigen Code inkl. Textdatei und der Importfunktion eingefügt! Zählt dies nicht als reproduzierbares Beispiel?
Hi,

wenn Dein Code mit "clim = rio::import("DWD_Data.txt")" beginnt, dann kann den Rest keiner reproduzieren, der nicht über die Datei "DVD_Data.txt" verfügt.
Außerdem ist es immer wünschenswert, den Code auf den Teil einzudampfen, der wirklich notwendig ist, um das Problem zu reproduzieren. Während man das macht, findet man auch viele Fehler selbst (s.o.). Ganz gut beschrieben ist das hier: https://stackoverflow.com/help/minimal- ... le-example
Hinweise wie man dann die Daten in R anbieten kann hat EDi mal hier hinterlegt: viewtopic.php?t=11

LG,
Bernhard

Re: farbige Zeitreihe

Verfasst: So Jan 15, 2023 5:00 pm
von retep
Hi,

hab vielen Dank! Ich werde mir das nochmal – fürs nächste Mal zu Gemüte führen!

VG

retep