Как создать диаграмму Ганта в R с помощью ggplot2


Диаграмма Ганта — это тип диаграммы, которая показывает время начала и окончания различных событий.

В этом руководстве объясняется, как создать диаграмму Ганта в R с помощью пакета ggplot2 .

Создание диаграммы Ганта в R с использованием ggplot2

Предположим, у нас есть следующий набор данных, показывающий время начала и окончания смен четырех разных работников в магазине:

#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_colour_manual(values = c('pink', 'purple', 'blue'))

В результате получается следующая диаграмма с розовым, фиолетовым и синим цветами для представления различных типов сдвига:

Использование пользовательских тем

Мы можем пойти дальше, используя пользовательские темы из библиотеки ggthemes .

Например, мы можем создать диаграмму Ганта, используя тему, вдохновленную The Wall Street Journal:

#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_colour_manual(values = c('pink', 'purple', 'blue')) +
 theme_wsj() + 
 theme(axis.title = element_text()) 

Или мы могли бы использовать тему, вдохновленную The Economist:

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_colour_manual(values = c('pink', 'purple', 'blue')) +
 theme_economist() + 
 theme(axis.title = element_text()) 

Или, возможно, тема, вдохновленная Five Thirty Eight :

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_colour_manual(values = c('pink', 'purple', 'blue')) +
 theme_fivethirtyeight() + 
 theme(axis.title = element_text()) 

Полный список тем, доступных в библиотеке ggthemes , можно найти на странице документации .