首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重排序分类y轴(甘特图)

重排序分类y轴(甘特图)
EN

Stack Overflow用户
提问于 2020-11-21 07:46:19
回答 1查看 544关注 0票数 3

我试图用不同的任务从表中生成甘特图(每个表都有一个开始日期和结束日期)。

代码语言:javascript
复制
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轴上的

  • 如何绘制每月较粗的线和每周较薄的线?

谢谢你帮忙!

EN

回答 1

Stack Overflow用户

发布于 2020-11-21 08:05:59

这一目标可以这样实现:

  1. ( @RuiBarrades )在他的评论中提到,为了得到正确的顺序,您必须转换成一个因子,并按照正确的顺序设置级别。首先,为组设置级别。其次,为了按所需的顺序获得任务,我按组和开始日期重新排列数据集,并使用forcats::fct_inorder按照所需的顺序设置任务的级别。

  1. ,如果我对你说得对,你想要周和月的不同网格线吗?这可以通过设置date_breaks_minor="month"和通过themepanel.grid.minor/major.x设置网格线的样式来实现。在这里,我选择了“黑色”颜色,但如果你喜欢不同的尺寸,你可以通过size.

这样做。

代码语言:javascript
复制
library(tidyverse)
library(ggplot2)

# 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),
               group = factor(group, levels = c("Finance", "Research", "Other"))) %>%
  arrange(desc(group), desc(from)) %>% 
  mutate(task = forcats::fct_inorder(task)) %>% 
  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_minor_breaks = "1 month",
               date_labels="%U") +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5), 
        panel.grid.minor.x = element_line(color = "black"))+
  ggtitle("Milestones") +
  labs(y="", x = "", colour="Responsible")

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64940870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档