R ggplot:重新排序分类y轴(甘特图)
我正在尝试从一个包含不同任务的表中生成甘特图(每个任务都有开始日期和结束日期)R ggplot:重新排序分类y轴(甘特图),r,ggplot2,tidyverse,R,Ggplot2,Tidyverse,我正在尝试从一个包含不同任务的表中生成甘特图(每个任务都有开始日期和结束日期) 库(tidyverse) #样本数据 df1%变异(从=截止日期(从), 截止日期=截止日期(截止日期))%>% pivot_longer(cols=c(from,to),value_to=“date”)%>% ggplot(aes(x=日期,y=任务,颜色=组))+ 几何尺寸线(lwd=3)+ 几何点(aes(颜色=组),α=0.5,pch=18,大小=5)+ 缩放日期(position=“bottom”,date
库(tidyverse)
#样本数据
df1%变异(从=截止日期(从),
截止日期=截止日期(截止日期))%>%
pivot_longer(cols=c(from,to),value_to=“date”)%>%
ggplot(aes(x=日期,y=任务,颜色=组))+
几何尺寸线(lwd=3)+
几何点(aes(颜色=组),α=0.5,pch=18,大小=5)+
缩放日期(position=“bottom”,date\U breaks=“1周”,date\U标签=“%U”)+
主题_bw()+
主题(plot.title=element\u text(hjust=0.5))+
标题(“里程碑”)+
实验室(y=“”,x=“”,color=“负责”)
到目前为止还不错,但现在我有一个大问题和一个小问题:
主要问题:
- 我如何在y轴上重新排序数据中显示的类别(而不是字母顺序)?自上而下应该是:金融、研究和其他。此外,在每个类别(财务、研究、其他)中,应按开始日期对行进行排序(即,首先开始的任务应位于顶部)
- 在x轴上,我如何为每个月绘制一条较粗的线,为每个星期绘制一条较细的线
谢谢你的帮助 可以这样实现:
forcats::fct_以顺序设置任务的级别
date\u breaks\u minor=“month”
并通过theme
和panel.grid.minor/major.x
设置网格线的样式来实现。在这里,我选择了“黑色”,但如果您喜欢不同的尺寸,可以通过size
来选择
库(tidyverse)
图书馆(GG2)
#样本数据
df1%变异(从=截止日期(从),
至=截止日期(至),
组=系数(组,级别=c(“金融”、“研究”、“其他”))%>%
排列(描述(组),描述(从))%>%
突变(任务=forcats::fct_顺序(任务))%>%
pivot_longer(cols=c(from,to),value_to=“date”)%>%
ggplot(aes(x=日期,y=任务,颜色=组))+
几何尺寸线(lwd=3)+
几何点(aes(颜色=组),α=0.5,pch=18,大小=5)+
缩放日期(position=“bottom”,date\u breaks=“1周”,date\u minor\u breaks=“1个月”,
日期标签=“%U”)+
主题_bw()+
主题(plot.title=element\u text(hjust=0.5),
panel.grid.minor.x=元素(color=“black”))+
标题(“里程碑”)+
实验室(y=“”,x=“”,color=“负责”)
1)
库(tidyverse)
也加载ggplot2
,不需要显式加载;2) 若要按分类变量对轴进行排序,请将其定义为具有所需级别顺序的因子,ggplot将保持该顺序,请参阅“forcats::fct_inoorder(task)”部分的重要提示。在规模上比使用与给定潜在范围的小组/负责人相同的方法要好得多。OP-如果您正在从数据帧生成多个图形/项目,请从图形调用中取出前进管道(%%>%),并将df group列作为因子版本进行重写。哇,太棒了!非常感谢。只是一个后续问题:为什么月份的线条不完全在周的节拍上?这是因为一般来说,周并不从一个月的开始开始,当然,因为一个月大约等于4.33周。。。。但是您可以尝试使用scale\u x\u date(position=“bottom”、date\u breaks=“4周”、date\u minor\u breaks=“1周”
并使用panel.grid.major.x=element\u line(color=“black”)
而不是panel.grid.minor.x
,后者使用的周期为4周。
library(tidyverse)
# Sample data
df1 <- data.frame(from = c("2020-01-01", "2020-02-02", "2020-05-04", "2020-02-01", "2020-01-20", "2020-02-10"),
to = c("2020-03-30", "2020-03-15", "2020-05-20", "2020-04-05", "2020-03-05", "2020-04-13"),
task= c("Task 1", "Task 2", "Task 3", "Task 4", "Task 5", "Task 6"),
group = c("Finance", "Finance", "Research", "Research", "Other", "Other")
)
# Plot gantt-chart
df1 %>% mutate(from = as.Date(from),
to = as.Date(to)) %>%
pivot_longer(cols = c(from, to), values_to = "date") %>%
ggplot(aes(x=date, y=task, colour = group)) +
geom_line(lwd=3) +
geom_point(aes(color=group), alpha=.5, pch=18, size=5) +
scale_x_date(position="bottom", date_breaks = "1 week", date_labels="%U") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))+
ggtitle("Milestones") +
labs(y="", x = "", colour="Responsible")