Grafische Analyse von Aktivitäten

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Grafische Analyse von Aktivitäten

Beitrag von bigben »

Athomas hat geschrieben: Mo Mär 01, 2021 10:43 amDa wäre das erste gewesen, was ich gemacht hätte: für jede Spezies ein Scatterplot Mondphase x Anzahl Tiere ...
Wenn man mal missachtet, dass auf wenigen Fotos auch zwei Tiere drauf sind und als Aktivität die Dichte der Auslösungen betrachtet, könnte das so aussehen:

Code: Alles auswählen

d <- read.csv2("http://forum.r-statistik.de/download/file.php?id=1383", dec = ".")
str(d)

library(ggplot2)
ggplot(d) + 
  geom_histogram(aes(x = mondphase), bins = 10, fill = "grey", col = "darkgrey") +
  geom_rug(aes(x = mondphase)) +
  xlab("Mondhelligkeit") +
  ylab("Zahl der Kameraauslösungen") +
  facet_wrap(. ~ Species) + 
  theme_bw()
So schlicht geht das natürlich nur, wenn alle Mondphasengleich viele Chancen hatten, sprich wenn die Kamera nicht viel länger bei Neumond als bei Vollmond draußen gestanden hat.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Eliomys
Beiträge: 20
Registriert: Fr Feb 26, 2021 12:23 pm

Re: Grafische Analyse von Aktivitäten

Beitrag von Eliomys »

Hallo Bernhard,

vielen Dank für diese Eindrücke!

Bei den Sonnenzeiten habe ich in einer Veröffentlichung ein Diagramm gesehen, das ich gerne in meiner Arbeit in einer ähnlichen Form verwenden wollen würde. Diese Art Diagramm wird im Prinzip immer verwendet, man einen solchen Sachverhalt darstellen möchte.
Das Ding ist, dass ich da einfach nicht weiß, wie ich die ganzen Variablen unter einen Hut bringe.

https://www.nature.com/articles/s41598- ... /figures/1

Ich habe mir dazu Gedanken gemacht und würde es mit ggplot2 und dann mit geom_ribbbon() für die Sonnenaufgänge und -untergänge versuchen geom_point() für die fotografierten Tiere. Liege ich mit dieser Annahme richtig?
Die Datenklasse für die Sonnenzeiten - in meiner CSV-Datei unter dem Tite "up" und "down" - sind in der POSIXt-Klasse.

Das ist insgesamt eine verzwickte Situation. Ich habe die Mondphase, die Sonnenzeiten etc. ohne größere für jede Koordinate von R berechnen lassen und habe alle erforderlichen Daten fein säuberlich in Tabellenblättern und jetzt scheitert es an den Diagrammen. Ich würde mal vermuten, dass dies letztendlich der einfachere Part ist.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Grafische Analyse von Aktivitäten

Beitrag von bigben »

Eliomys hat geschrieben: Fr Feb 26, 2021 1:22 pmMeine andere Idee für ein nachtaktives Tier ist, dass ich ein Diagramm erstelle x=Datum und y=Uhrzeit und den Sonnenaufgang beziehungsweise -untergang als jeweils eigene Kurve darstelle. Von 0 Uhr aufsteigend bis erneut 0 Uhr auf der Y-Achse und das Datum von Anfang bis Ende der Untersuchung auf der X-Achse. Demnach wäre im unteren Bereich des Diagramms die Kurve für den Sonnenaufgang und im oberen Bereich des Diagramms die Kurve für den Sonnenuntergang. Auch hier möchte ich die Auslösungen der Kameras mit Hilfe von Punkten darstellen. Bei den nachtaktiven Tieren ordnen sich die Punkte somit im mittleren Bereich des Diagramms - zwischen den beiden Kurven - an.
Das folgende braucht ein wenig Rechenzeit, vor allem weil da viel zu oft Tagesanfang und -ende eingezeichnet werden, aber dem Endergebnis sieht man das nicht an:

Code: Alles auswählen

d <- read.csv2("http://forum.r-statistik.de/download/file.php?id=1383", dec = ".")

library(ggplot2)
library(lubridate)

d$Photo.date = as.Date(d$Photo.Date)
d$Photo.time = hms(d$Photo.time)
d$up_dt <- ymd_hms(d$up)
d$down_dt <- ymd_hms(d$down)

ggplot(d) +
  geom_errorbar(aes(x = date(up_dt), 
                    ymin = hour(up_dt)+1/60*minute(up_dt), 
                    ymax = hour(down_dt)+1/60*minute(down_dt)),
                lwd = 3, color = "orange")+
  geom_point(aes(x = Photo.date, y = Photo.time@hour + Photo.time@minute/60))+
  scale_y_continuous(breaks = seq(0,24,4), name = "Uhrzeit", 
                     labels = c("0:00", "4:00", "8:00", "12:00", 
                                "16:00", "20:00", "23:59")) +
  xlab("Datum") 
  
Rplot.png
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Eliomys
Beiträge: 20
Registriert: Fr Feb 26, 2021 12:23 pm

Re: Grafische Analyse von Aktivitäten

Beitrag von Eliomys »

Hallo Bernhard,

vielen Dank. Ich kann Dir wirklich gar nicht genug danken für diese Unterstützung.
Leider ist es so, dass ich den Orangefarbenen Teil der Grafik nicht sehen kann.

Bei mir sagt R:

Code: Alles auswählen

Fehler in seq.int(0, to0 - from, by) : 'to' must be a finite number
Zusätzlich: Warnmeldungen:
1: In min(x) : kein nicht-fehlendes Argument für min; gebe Inf zurück
2: In max(x) : kein nicht-fehlendes Argument für max; gebe -Inf zurück
3: In min(diff(sort(x))) :
  kein nicht-fehlendes Argument für min; gebe Inf zurück
Ich versuche mal eben die Fehler zu beheben.
Herzlichsten Dank und liebe Grüße

EDIT: Es klappt alles! Herzlichen Dank!!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Grafische Analyse von Aktivitäten

Beitrag von bigben »

Hallo Eliomys,

versuch doch bei der letzten Grafik bitte mal geom_point durch geom_count zu ersetzen. Es gab wohl doch einige Tiere zur gleichen Minute und geom_count macht das durch die Punktgröße deutlich.

Viel Erfolg,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Eliomys
Beiträge: 20
Registriert: Fr Feb 26, 2021 12:23 pm

Re: Grafische Analyse von Aktivitäten

Beitrag von Eliomys »

Riesen Dank!

Ich probiere es gleich direkt aus!

LG
Eliomys
Beiträge: 20
Registriert: Fr Feb 26, 2021 12:23 pm

Re: Grafische Analyse von Aktivitäten

Beitrag von Eliomys »

bigben hat geschrieben: Mo Mär 01, 2021 3:08 pm
versuch doch bei der letzten Grafik bitte mal geom_point durch geom_count zu ersetzen. Es gab wohl doch einige Tiere zur gleichen Minute und geom_count macht das durch die Punktgröße deutlich.
Stark, das sieht sehr gut aus!!!
Danke!!

Ich versuche mal statt der Balken je eine Linie für Sonnenaufgang und Sonnenunterang zu erstellen.
Eliomys
Beiträge: 20
Registriert: Fr Feb 26, 2021 12:23 pm

Re: Grafische Analyse von Aktivitäten

Beitrag von Eliomys »

Servus Bernhard,

die letzten Stunden habe ich nun versucht anhand Deines Codes ein Diagramm mit zwei Linien für jeweils Sonnenaufgang und -untergang zu erstellen.

Der Code sieht wiefolgt aus:

Code: Alles auswählen

ggplot(d) + 
  geom_line(aes( x = date (up_dt), y = hour(up_dt+1/60*minute(up_dt), lwd = 3, color = "orange"))) + 
  geom_line(aes(x = date(up_dt), y = hour(down_dt)+1/60*minute(down_dt) lwd = 3, color = "orange")) +
  geom_count(aes(x = Photo.date, y = Photo.time@hour + Photo.time@minute/60))+
  scale_y_continuous(breaks = seq(0,24,4), name = "Uhrzeit", labels = c("0:00, 4:00", "8:00", "12:00", "16:00", "20:00", "23:59"))+
  xlab("Datum")
Ich kann daraus nur leider kein Diagramm erstellen, weil einige Fehlermeldungen angezeigt werden, die ich nicht so ganz einordnen kann.

Code: Alles auswählen

<error/rlang_error>
`breaks` and `labels` must have the same length
Backtrace:
 1. ggplot2::scale_y_continuous(...)
 2. ggplot2::continuous_scale(...)
 3. ggplot2:::check_breaks_labels(breaks, labels)
Wo genau habe ich die Fehler? Also es steht ja da, wo genau der Fehler liegt jedoch weiß ich leider Gottes nicht allzu viel damit anzufangen. Vermutlich ist es etwas Banales, oder?
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Grafische Analyse von Aktivitäten

Beitrag von EDi »

Vergleich doch mal

Code: Alles auswählen

seq(0,24,4)
und

Code: Alles auswählen

c("0:00, 4:00", "8:00", "12:00", "16:00", "20:00", "23:59")
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.
Eliomys
Beiträge: 20
Registriert: Fr Feb 26, 2021 12:23 pm

Re: Grafische Analyse von Aktivitäten

Beitrag von Eliomys »

Also muss ich bei seq() dieselbe Zahlenfolge wie bei labels angeben?
Ich hatte Teile des Codes von Bernhard übernommen und da waren seq() und labels genauso aufgebaut. Da hatte es so funktioniert.
Antworten