Comment commander geom_segment ggplot avec couleur
Je suis nouveau à la ggplotbibliothèque. Et en essayant de dessiner l'intrigue en utilisant ce qui suit 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)
À l'aide de l'extrait de code suivant:
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")
Je peux produire le graphique suivant:
Comment puis-je commander le graphique ci-dessus en utilisant la couleur c'est-à-dire en utilisant le eventchamp (en d'autres termes comment puis-je effectuer une opération groupe par opération sur le eventchamp pour qu'il affiche d'abord tous les événements A puis les événements B, C etc.)? J'ai essayé d'utiliser scale_x_continuouset reorderdu tidyversepackage mais cela n'a pas fonctionné. Comment puis-je afficher plus "Année" sur l'axe des x? J'ai essayé d'utiliser scale_x_date(mentionné ici R: ggplot affiche toutes les dates sur l'axe des x mais il a besoin as.Dateet a ggplot geom_segmentbesoin d'un as.POSIXctformat). N'hésitez pas à me corriger!
Toute aide est la bienvenue! Je vous remercie!
Réponses
Deux options. J'ai également inversé vos x et y pour que vous n'ayez pas à utiliser coord_flip()et j'ai fait plusieurs autres petites modifications, y compris les étiquettes de l'axe des x (que vous recherchiez scale_y_datetimedepuis que vous avez inversé les axes et que les "dates" étaient en fait dans POSIXct). En outre, une différence avec la réponse de Duck est ma balance = "gratuit" facet_grid. Vous pouvez décider de vos étiquettes et votre variable "loc" peut ne pas avoir de sens étant donné ces nouveaux graphiques de toute façon.
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")
Créé le 2020-10-18 par le package reprex (v0.3.0)
Considérez cela comme une option, comme mentionné par @ArthurYip , la réorganisation des paramètres pourrait affecter le sens de votre intrigue. Vous pouvez éviter les étiquettes et utiliser facet_grid()de la manière suivante:
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")
Production: