Cách đặt hàng ggplot geom_segment với màu sắc
Tôi là người mới đến ggplotthư viện. Và cố gắng vẽ cốt truyện bằng cách sử dụng như sau 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)
Sử dụng đoạn mã sau:
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")
Tôi có thể xuất ra biểu đồ sau:
Làm cách nào để tôi có thể sắp xếp biểu đồ trên bằng cách sử dụng màu tức là sử dụng eventtrường (nói cách khác, làm cách nào để thực hiện nhóm theo thao tác trên eventtrường để đầu tiên nó hiển thị trước tất cả các sự kiện A sau đó đến các sự kiện B, C, v.v.)? Tôi đã cố gắng sử dụng scale_x_continuousvà reordertừ tidyversegói nhưng nó không hoạt động. Làm cách nào để hiển thị thêm "Năm" trên trục x? Tôi đã cố gắng sử dụng scale_x_date(được đề cập ở đây R: ggplot hiển thị tất cả các ngày trên trục x nhưng nó cần as.Datevà ggplot geom_segmentcần as.POSIXctđịnh dạng). Xin vui lòng sửa cho tôi!
Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời! Cảm ơn bạn!
Trả lời
Hai lựa chọn. Tôi cũng đã đảo ngược x và y của bạn để bạn không phải sử dụng coord_flip()và thực hiện một số sửa đổi nhỏ khác bao gồm các nhãn trục x (bạn đang tìm kiếm scale_y_datetimevì bạn đã lật các trục và "ngày" thực sự nằm trong POSIXct). Ngoài ra, một điểm khác biệt với câu trả lời của Duck là my scale = "free" in facet_grid. Bạn có thể quyết định nhãn của mình và biến "loc" của bạn có thể không hợp lý với những biểu đồ mới này.
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")
Được tạo vào 2020-10-18 bởi gói reprex (v0.3.0)
Hãy coi đây là một tùy chọn, như được đề cập bởi @ArthurYip, việc sắp xếp lại thiết lập có thể ảnh hưởng đến cảm giác của cốt truyện của bạn. Bạn có thể tránh các nhãn và sử dụng facet_grid()theo cách tiếp theo:
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")
Đầu ra: