Seite 1 von 1

X-Achse skalieren

Verfasst: Do Nov 18, 2021 1:54 pm
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!

Re: X-Achse skalieren

Verfasst: Do Nov 18, 2021 4:03 pm
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

Re: X-Achse skalieren

Verfasst: Do Nov 18, 2021 11:15 pm
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")


Re: X-Achse skalieren

Verfasst: Mi Nov 24, 2021 2:45 pm
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' ?!?

Re: X-Achse skalieren

Verfasst: Mi Nov 24, 2021 3:16 pm
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

Re: X-Achse skalieren

Verfasst: Do Nov 25, 2021 3:13 pm
von G-Rizzle
Hi,


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

Bild

Re: X-Achse skalieren

Verfasst: Do Nov 25, 2021 7:13 pm
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

Re: X-Achse skalieren

Verfasst: Fr Nov 26, 2021 8:51 am
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

Re: X-Achse skalieren

Verfasst: Fr Nov 26, 2021 1:16 pm
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