【问题标题】:How to order geom_segment ggplot with colour如何用颜色订购 geom_segment ggplot
【发布时间】:2021-02-01 16:42:33
【问题描述】:

我是 ggplot 库的新手。并尝试使用以下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)

使用如下代码sn-p:

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") 

我可以输出如下图表:

我如何使用颜色订购上述图表,即使用event 字段(换句话说,我如何对event 字段执行分组操作,以便首先它应该首先显示所有事件A然后是事件 B、C 等)?我尝试使用tidyverse 包中的scale_x_continuousreorder,但没有成功。如何在 x 轴上显示更多“年份”?我尝试使用scale_x_date(这里提到R: ggplot display all dates on x axis,但它需要as.Dateggplotgeom_segment需要as.POSIXct格式)。请随时纠正我!

任何帮助都会很棒!谢谢!

【问题讨论】:

  • 你可以按事件重新排序,但是你的 LoC 就没有意义了。

标签: r ggplot2


【解决方案1】:

将其视为一个选项,正如 @ArthurYip 所述,设置重新排序可能会影响情节的感觉。您可以避免使用标签并在下一个方式中使用facet_grid()

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")

输出:

【讨论】:

【解决方案2】:

两个选项。我还颠倒了您的 x 和 y,因此您不必使用 coord_flip() 并进行了其他一些小的修改,包括 x 轴标签(您正在寻找 scale_y_datetime,因为您翻转了轴和“日期”实际上在 POSIXct 中)。此外,与 Duck 的答案的一个区别是我在 facet_grid 中的 scales = "free"。鉴于这些新图表,您可能会决定您的标签和“loc”变量可能没有意义。

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")

reprex package (v0.3.0) 于 2020 年 10 月 18 日创建

【讨论】:

  • 您可以保留“loc”变量,以便每个项目都有自己的行/行。如果它们真的没有任何意义,那么您可以在后期处理中隐藏 y 轴。
猜你喜欢
  • 1970-01-01
  • 2013-02-27
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多