X-Achse skalieren

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
G-Rizzle
Beiträge: 7
Registriert: Do Nov 18, 2021 1:51 pm

X-Achse skalieren

Beitrag von G-Rizzle »

Hi,

Ich habe einen Datensatz, bei dem ich den Temperaturverlauf über viele Tage habe. Den möchte ich plotten. Mein Code sieht folgend aus (provisorisch)

Code: Alles auswählen

 ggplot() + geom_line(data = datensatz, mapping = aes(x = Datum, y=Mittelwert, group = 1))
Die Daten auf der X-Achse sind leider nicht lesbar, da zu viele zusammengequetscht sind. Wie kann ich das ganze entzerren? Etwa, dass nur ein Datum die Woche angezeigt wird o.ä.?

Besten Dank schonmal!
bigben
Beiträge: 2388
Registriert: Mi Okt 12, 2016 9:09 am

Re: X-Achse skalieren

Beitrag von bigben »

Hallo G-Rizzle,

irgendwas stimmt da nicht und ich tippe auf das falsche Format. Kannst Du bitte mal die Antwort auf

Code: Alles auswählen

str(datensatz)
posten? Noch spezieller

Code: Alles auswählen

typeof(datensatz$Datum)
Was bezweckst Du mit "group = 1"?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1549
Registriert: Sa Okt 08, 2016 3:39 pm

Re: X-Achse skalieren

Beitrag von EDi »

scale_x_date ist dein Freund hier https://ggplot2.tidyverse.org/reference/scale_date.html

Code: Alles auswählen

last_month <- Sys.Date() - 0:29
df <- data.frame(
  date = last_month,
  price = runif(30)
)
base <- ggplot(df, aes(x = date, y = price)) +
  geom_line()
base

base + 
  scale_x_date(date_breaks = "1 day")
base + 
  scale_x_date(date_breaks = "1 week")
base + 
  scale_x_date(date_breaks = "1 month")

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
Bild.
G-Rizzle
Beiträge: 7
Registriert: Do Nov 18, 2021 1:51 pm

Re: X-Achse skalieren

Beitrag von G-Rizzle »

bigben hat geschrieben: Do Nov 18, 2021 4:03 pm Hallo G-Rizzle,

irgendwas stimmt da nicht und ich tippe auf das falsche Format. Kannst Du bitte mal die Antwort auf

Code: Alles auswählen

str(datensatz)
posten? Noch spezieller

Code: Alles auswählen

typeof(datensatz$Datum)
Was bezweckst Du mit "group = 1"?

LG,
Bernhard

Hi! Danke dir schonmal. Ich glaube tatsächlich, dass am Datenformat etwas nicht passt. Ich lese den Datensatz ein und mache direkt ein DF daraus :

Code: Alles auswählen

df = data.frame(read.csv("temperaturverlauf_KL_september.csv"))
Lasse ihn darauf anzeigen, alles gut;

Code: Alles auswählen

typeof(df)
--> 'list' ?!?
bigben
Beiträge: 2388
Registriert: Mi Okt 12, 2016 9:09 am

Re: X-Achse skalieren

Beitrag von bigben »

Hallo G-Rizzle,
G-Rizzle hat geschrieben: Mi Nov 24, 2021 2:45 pmLasse ihn darauf anzeigen, alles gut;
Und ich glaube nicht, dass Du an der normalen Anzeige erkennst, ob alles gut ist.

Code: Alles auswählen

typeof(df)
--> 'list' ?!?
Nach typeof(df) hat keiner gefragt. Die Frage lautet, ob Deine Datumsvariable auf der x-Achse als Datum oder als Text eingelesen worden ist.

Gruß,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
G-Rizzle
Beiträge: 7
Registriert: Do Nov 18, 2021 1:51 pm

Re: X-Achse skalieren

Beitrag von G-Rizzle »

Hi,


Der Typ des Vektors ist Liste, jeder Datumeintrag ist ein Integer. merkwürdig.
Umformatierung klappt wie zu sehen nicht.

Bild
Dateianhänge
Screenshot.png
bigben
Beiträge: 2388
Registriert: Mi Okt 12, 2016 9:09 am

Re: X-Achse skalieren

Beitrag von bigben »

Das ist komisch. Wenn ich so ein Datum mit read.table einlese, dann ist das nicht vom Typ integer sondern vom Typ character und wenn ich es mit as.Date() umwandle ist es immer noch nicht integer sondern vom Typ double:

Code: Alles auswählen

test <- read.table(text = "datum
                           2021-11-13
                           2021-11-14
                           2021-11-15",
                   header = TRUE)
datum_as_date <- as.Date(test[['datum']], format="%Y-%m-%d")
typeof(datum_as_date)
class(datum_as_date)
Ich schätze mal, ein reproduzierbares Beispiel wäre der schnellste und nachhaltigste Weg zum Erfolg.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2065
Registriert: Fr Okt 07, 2016 8:25 am

Re: X-Achse skalieren

Beitrag von jogo »

Code: Alles auswählen

str(iris)
typeof(iris$Species)
$Species ist ein Faktor, das Ergebnis von typeof() ist "integer", weil Faktoren intern als integer kodiert werden.

Gruß, Jörg
bigben
Beiträge: 2388
Registriert: Mi Okt 12, 2016 9:09 am

Re: X-Achse skalieren

Beitrag von bigben »

Danke Jörg, da bin ich nicht drauf gekommen :oops: . Dann benutzt G-Rizzle wohl noch ein R Version 3.x und noch keine Version 4. Aktuell ist gerade Version 4.1.2.

Damit entspricht die Situation diesem Beispiel hier:

Code: Alles auswählen

test <- read.table(text = "datum       wert
                           2021-11-01  0.8
                           2021-11-08  1.5
                           2021-11-09  1.3
                           2021-11-10  1.8
                           2021-11-11  1.8
                           2021-11-12  2.0
                           2021-11-13  2.3
                           2021-11-14  2.4
                           2021-11-15  2.45",
                   header = TRUE, 
                   stringsAsFactors = TRUE)

test$datum_as_date <- as.Date(as.character(test$datum), "%Y-%m-%d")

library(ggplot2)
ggplot(test, aes(x = datum_as_date, y = wert)) +
  geom_col() 
HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten