Come ordinare geom_segment ggplot con color
Sono nuovo in ggplotbiblioteca. E cercando di disegnare la trama usando quanto segue 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)
Utilizzando il seguente frammento di codice:
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")
Sono in grado di produrre il seguente grafico:
Come posso ordinare il grafico sopra usando il colore cioè usando il eventcampo (in altre parole come posso eseguire un'operazione di gruppo per operazione sul eventcampo in modo che prima visualizzi prima tutti gli eventi A poi gli eventi B, C ecc.)? Ho provato a usare scale_x_continuouse reorderdal tidyversepacchetto ma non ha funzionato. Come posso visualizzare più "Anno" sull'asse x? Ho provato a usare scale_x_date(menzionato qui R: ggplot mostra tutte le date sull'asse x ma ha bisogno as.Datee ha ggplot geom_segmentbisogno di as.POSIXctformato). Non esitate a correggermi!
Qualsiasi aiuto sarebbe grande! Grazie!
Risposte
Due opzioni. Ho anche invertito la tua xey così non devi usare coord_flip()e fare molte altre piccole modifiche incluse le etichette dell'asse x (stavi cercando scale_y_datetimedato che hai invertito gli assi e le "date" erano effettivamente in POSIXct). Inoltre, una differenza con la risposta di Duck è la mia bilancia = "free" in facet_grid. Potresti decidere che le tue etichette e la tua variabile "loc" potrebbero non avere senso dati questi nuovi grafici comunque.
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")
Creato il 18-10-2020 dal pacchetto reprex (v0.3.0)
Considera questa come un'opzione, come menzionato dal riordino delle impostazioni di @ArthurYip potrebbe influenzare il senso della tua trama. Potresti evitare le etichette e utilizzare facet_grid()nel modo successivo:
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")
Produzione: