【发布时间】:2021-03-04 13:00:45
【问题描述】:
我正在尝试从具有不同任务(每个都有开始日期和结束日期)的表中生成甘特图。
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")
到目前为止一切顺利,但现在我有一个主要问题和一个小问题:
主要问题:
- 如何在 y 轴上重新排序出现在数据中的类别(不按字母顺序)?从上到下应该是:金融、研究、其他。此外,在每个类别(金融、研究、其他)中,行应按开始日期排序(即首先开始的任务应位于顶部)
小问题:
- 如何在 x 轴上绘制每个月的粗线和每周的细线?
感谢您的帮助!
【问题讨论】:
-
1)
library(tidyverse)也加载了ggplot2,不需要显式加载; 2)按分类变量对轴进行排序,将其定义为具有所需级别顺序的因子,ggplot 将保持该顺序,请参阅this SO post。