So bestellen Sie geom_segment ggplot mit Farbe
Ich bin neu in der ggplotBibliothek. Und versuchen Sie, die Handlung wie folgt zu zeichnen data.frame:
library(tidyverse)
df <-tribble(~event, ~startdate,~enddate,~loc,
"A",as.POSIXct("1984/02/10"),as.POSIXct("1987/06/10"),"1",
"B",as.POSIXct("1984/02/11"),as.POSIXct("1990/02/12"),"2",
"A",as.POSIXct("1992/05/15"),as.POSIXct("1999/06/15"),"3",
"C",as.POSIXct("2003/08/29"),as.POSIXct("2015/08/29"),"4",
"B",as.POSIXct("2002/04/11"),as.POSIXct("2012/04/12"),"5",
"E",as.POSIXct("2000/02/10"),as.POSIXct("2005/02/15"),"6")
max_date = max(df$startdate,df$enddate)
Verwenden des folgenden Codeausschnitts:
ggplot(NULL)+
geom_segment(data = df,aes(x=loc, xend =loc,y = startdate, yend = enddate,colour=event),size = 5,alpha=0.6) +
geom_label(aes(label=df$event,x = df$loc,y=max_date), size=2) +
#geom_point(data=final_df,aes(x=newspaper,y=date),color="black") + Point from other data frame
coord_flip() + xlab("LoC") + ylab("Year")
Ich kann das folgende Diagramm ausgeben:
Wie kann ich das obige Diagramm anhand der Farbe bestellen, dh anhand des eventFelds (mit anderen Worten, wie kann ich eine Gruppierung nach Operation auf dem eventFeld durchführen, sodass zuerst alle Ereignisse A, dann Ereignisse B, C usw. angezeigt werden )? Ich habe versucht, scale_x_continuousund reorderaus tidyversePaket zu verwenden, aber es hat nicht funktioniert. Wie kann ich mehr "Jahr" auf der x-Achse anzeigen? Ich habe versucht zu verwenden scale_x_date(hier erwähnt R: ggplot zeigt alle Daten auf der x-Achse an, aber es braucht as.Dateund ggplot geom_segmentbraucht as.POSIXctFormat). Bitte zögern Sie nicht mich zu korrigieren!
Jede Hilfe wäre toll! Vielen Dank!
Antworten
Zwei Optionen. Ich habe auch Ihr x und y umgekehrt, damit Sie nicht coord_flip()einige andere kleine Änderungen vornehmen müssen, einschließlich der Beschriftungen der x-Achse (Sie haben gesucht, scale_y_datetimeseit Sie die Achsen umgedreht haben und die "Daten" tatsächlich in POSIXct waren). Ein Unterschied zu Ducks Antwort ist auch, dass meine Waage = "frei" ist facet_grid. Möglicherweise entscheiden Sie, welche Beschriftungen Sie verwenden, und Ihre Variable "loc" ist angesichts dieser neuen Diagramme möglicherweise ohnehin nicht sinnvoll.
library(tibble); library(ggplot2)
df <-tribble(~event, ~startdate,~enddate,~loc,
"A",as.POSIXct("1984/02/10"),as.POSIXct("1987/06/10"),"1",
"B",as.POSIXct("1984/02/11"),as.POSIXct("1990/02/12"),"2",
"A",as.POSIXct("1992/05/15"),as.POSIXct("1999/06/15"),"3",
"C",as.POSIXct("2003/08/29"),as.POSIXct("2015/08/29"),"4",
"B",as.POSIXct("2002/04/11"),as.POSIXct("2012/04/12"),"5",
"E",as.POSIXct("2000/02/10"),as.POSIXct("2005/02/15"),"6")
max_date = max(df$startdate,df$enddate)
ggplot(df)+
geom_segment(aes(y=event, yend = event, x = startdate, xend = enddate, colour=event),size = 5,alpha=0.6) +
geom_label(aes(label=event, y = event, x=max_date), size=2) +
xlab("Year") + ylab("LoC") +
scale_x_datetime(date_breaks = "year", date_labels = "%Y") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5))
ggplot(df)+
geom_segment(aes(y=loc, yend = loc, x = startdate, xend = enddate, colour=event),size = 5,alpha=0.6) +
geom_label(aes(label=event, y = loc, x=max_date), size=2) +
xlab("Year") + ylab("LoC") +
scale_x_datetime(date_breaks = "year", date_labels = "%Y") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
facet_grid(rows = vars(event), scales = "free")
Erstellt am 18.10.2020 durch das reprex-Paket (v0.3.0)
Betrachten Sie dies als Option, wie von @ArthurYip erwähnt. Eine Neuordnung der Einstellungen kann den Sinn Ihres Diagramms beeinträchtigen. Sie könnten die Etiketten vermeiden und facet_grid()auf folgende Weise verwenden:
library(ggplot2)
#Plot
ggplot(df)+
geom_segment(aes(x=loc, xend =loc,y = startdate, yend = enddate,colour=event),size = 5,alpha=0.6) +
coord_flip() + xlab("LoC") + ylab("Year")+
facet_grid(event~.,switch = "x")
Ausgabe: