Как создать диаграмму Ганта в 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()

Получается следующая диаграмма Ганта:

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

С помощью пары настроек макета мы можем сделать эту диаграмму Ганта намного лучше:

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'))

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

Диаграмма Ганта в R с пользовательскими цветами в ggplot2

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

Мы можем пойти дальше, используя пользовательские темы из библиотеки 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()) 
Диаграмма Ганта в R с темой Wall Street Journal

Или мы могли бы использовать тему, вдохновленную 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()) 
Диаграмма Ганта в R с использованием ggplot2

Или, возможно, тема, вдохновленная 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()) 
Диаграмма Ганта в R с использованием темы Five Thirty Eight

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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.