如何使用 ggplot2 在 r 中创建甘特图


甘特图是一种显示各种事件的开始和结束时间的图表。

本教程介绍如何使用ggplot2包在 R 中创建甘特图。

使用 ggplot2 在 R 中创建甘特图

假设我们有以下数据集,显示商店四个不同工人轮班的开始和结束时间:

 #create data frame
data <- data.frame(name = c('Bob', 'Greg', 'Mike', 'Andy'), 
start = c(4, 7, 12, 16),
end = c(12, 11, 8, 22),
shift_type = c('early', 'mid_day', 'mid_day', 'late')
)
data

# name start end shift_type
#1 Bob 4 12 early
#2 Greg 7 11 mid_day
#3 Mike 12 8 mid_day
#4 Andy 16 22 late

为了使用 ggplot2 创建甘特图来可视化每个工人的开始和结束时间,我们可以使用以下代码:

 #install (if not already installed) and load ggplot2
if(!require(ggplot2)){install.packages('ggplot2')}

#create gantt chart that visualizes start and end time for each worker
ggplot(data, aes(x=start, xend=end, y=name, yend=name, color=shift_type)) +
  geom_segment()

这会生成以下甘特图:

通过对布局进行一些调整,我们可以使这个甘特图看起来更好:

 ggplot(data, aes(x=start, xend=end, y=name, yend=name, color=shift_type)) +
theme_bw()+ #use ggplot theme with black gridlines and white background
geom_segment(size=8) + #increase line width of segments in the chart
labs(title='Worker Schedule', x='Time', y='Worker Name')

这会产生以下图表:

此外,如果您想设置图表中使用的确切颜色,可以使用以下代码:

 ggplot(data, aes(x=start, xend=end, y=name, yend=name, color=shift_type)) +
  theme_bw()+ #use ggplot theme with black gridlines and white background
  geom_segment(size=8) + #increase line width of segments in the chart
  labs(title='Worker Schedule', x='Time', y='Worker Name') +
  scale_color_manual(values = c('pink', 'purple', 'blue'))

这会生成以下图表,其中粉色、紫色和蓝色代表不同的班次类型:

使用自定义主题

我们可以进一步使用ggthemes库中的自定义主题。

例如,我们可以创建一个使用《华尔街日报》主题的甘特图:

 #load ggthemes library
library(ggthemes)

#create scatterplot with Wall Street Journal theme
ggplot(data, aes(x=start, xend=end, y=name, yend=name, color=shift_type)) +
  theme_bw()+
  geom_segment(size=8) +
  labs(title='Worker Schedule', x='Time', y='Worker Name') +
  scale_color_manual(values = c('pink', 'purple', 'blue')) +
  theme_wsj() + 
  theme(axis.title = element_text())

或者我们可以使用受《经济学人》启发的主题:

 ggplot(data, aes(x=start, xend=end, y=name, yend=name, color=shift_type)) +
  theme_bw()+
  geom_segment(size=8) +
  labs(title='Worker Schedule', x='Time', y='Worker Name') +
  scale_color_manual(values = c('pink', 'purple', 'blue')) +
  theme_economist() + 
  theme(axis.title = element_text())

或者也许是五点三十八分的灵感主题:

 ggplot(data, aes(x=start, xend=end, y=name, yend=name, color=shift_type)) +
  theme_bw()+
  geom_segment(size=8) +
  labs(title='Worker Schedule', x='Time', y='Worker Name') +
  scale_color_manual(values = c('pink', 'purple', 'blue')) +
  theme_fivethirtyeight() + 
  theme(axis.title = element_text())

有关ggthemes库中可用主题的完整列表,请参阅文档页面

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注