7 Stimmen

R und ggplot- Ändern der x-Achse auf Datum entfernt Positionsabweichung

Ich verwende ggplot, um Diagramme zu erstellen, und ich möchte meine Datenpunkte immer horizontal versetzen, damit sich die Fehlerbalken nicht überschneiden. Ich habe festgestellt, dass, wenn ich Date-Daten für meine x-Achse verwendet, ich verlieren die Fähigkeit, meine Datenpunkte zu versetzen.

DF=data.frame(Date=c("2006-09-01", "2007-09-01", "2008-09-01" ,"2009-09-01", "2010-01-01" ,"2011-01-01"),Count=c(1,2,3,4,5,6,2,4,6,8,10,12),Type=c('A','A','A','A','A','A','B','B','B','B','B','B'))

Wenn ich den obigen Datenrahmen mit ggplot wie folgt darstelle, sind die Punkte versetzt

dodge=position_dodge(.5)
ggplot(data=DF,aes(x=Date,y=Count,group=Type))+geom_point(position=dodge)

Aber wenn ich die Datumsdaten als aktuelle Daten bezeichne

DF$Date=as.Date(DF$Date)
ggplot(data=DF,aes(x=Date,y=Count,group=Type))+geom_point(position=dodge)

Die Punkte sind nicht mehr versetzt, auch wenn ich sie so festgelegt habe

In der Vergangenheit habe ich dieses Problem vermieden, indem ich meine Datumsdaten auf das "Jahr" beschränkt und als numerisch behandelt habe. Aber jetzt muss ich auch Informationen über den Monat einbeziehen (ich beziehe den Tag in mein Datum ein, da "as.Date" ein wenig komisch wird, wenn ich ihn nicht einbeziehe).

Kann mir also jemand sagen, ob es eine Möglichkeit gibt, eine Zeitreihe mit ggplot darzustellen, die es mir ermöglicht, meine Datenpunkte und Fehlerbalken zu versetzen.

9voto

kohske Punkte 63276

Eigentlich werden die Punkte leicht umgangen.

Sie müssen bedenken, dass der Abstand zwischen einem Jahr 365 Tage beträgt. position_dodge(0.5) verschiebt den Punkt um (einen halben Tag)/2. Die Position verschiebt sich also um 0,5/2/365 eines Jahresintervalls.

Wenn Sie `position_dodge(0.5 * 365) wählen, erhalten Sie die erwartete Darstellung:

DF <- data.frame(
  expand.grid(Date=c("2006-09-01", "2007-09-01", "2008-09-01" ,"2009-09-01"),
     Type = c("A", "B")),
  Count = 1:4)
DF$Date2 <- as.Date(DF$Date)

ggplot(data=DF,aes(x=Date2,y=Count,group=Type))+ geom_point(position = position_dodge(365*0.5))

enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X