2015-09-08 2 views
2

Я пытаюсь создать многопроектную шкалу времени, которая включает в себя различные этапы проекта, чтобы организовать все наши текущие проекты, проходящие вперед в одном удобном для визуализации месте.Создание многопроектной шкалы времени с использованием ggplot2 в R

Первоначально я нашел пакет timeline() и смог полу-создать то, на что я надеялся. Тем не менее, похоже, что пакет не очень настраиваемый, поэтому я надеюсь завершить свою временную шкалу в ggplot2().

Вот мой поддельный данные:

Phase Project StartDate EndDate 
SD Test1 2015-08-01 2015-08-31 
DD Test1 2015-08-31 2015-09-30 
CD Test1 2015-09-30 2015-11-14 
PC Test1 2015-11-14 2015-12-14 
CA Test1 2015-12-14 2016-08-10 
SD Test2 2015-09-01 2015-10-01 
DD Test2 2015-10-01 2015-10-31 
CD Test2 2015-10-31 2015-12-15 
PC Test2 2015-12-15 2016-01-14 
CA Test2 2016-01-14 2017-01-08 
SD Test3 2016-01-01 2016-01-13 
DD Test3 2016-01-13 2016-01-25 
CD Test3 2016-01-25 2016-02-12 
PC Test3 2016-02-12 2016-03-13 
CA Test3 2016-03-13 2017-01-07 
SD Test4 2015-06-01 2015-06-01 
DD Test4 2015-06-01 2015-06-01 
CD Test4 2015-06-01 2015-06-01 
PC Test4 2015-06-01 2015-07-01 
CA Test4 2015-07-01 2015-07-01 
SD Test5 2015-05-01 2015-05-25 
DD Test5 2015-05-25 2015-06-18 
CD Test5 2015-06-18 2015-07-24 
PC Test5 2015-07-24 2015-08-23 
CA Test5 2015-08-23 2015-08-23 

Как вы можете видеть, каждый проект имеет 5 этапов (SD, DD, CD, PC, CA) в списке, хотя некоторые проекты (test4) не будет иметь пара этапов, поскольку в настоящее время они имеют одни и те же даты.

Когда я побежал мой код с timeline(), это то, что я получил:

data$StartDate<- as.Date(data$StartDate) 
    data$EndDate<- as.Date(data$EndDate) 
    timeline(data, text.size=4) 

Result

Так как вы можете видеть, фазы получают перекрываться в некоторых ситуациях, и я не могу настроить шрифты или центрировать текст в соответствующих полях.

Из-за этого я пытаюсь перейти к ggplot, но не могу понять, как сделать его похожим на эту временную шкалу.

До сих пор это мой новый код:

ggplot(data,aes(x=data$StartDate, y=data$Project)) + 
    geom_line()+ 
    geom_point()+ 
    geom_text(aes(label=data$Phase), hjust=0,vjust=0) 

Result2

В настоящее время он стоит, то xlim слишком мал, чтобы показать всю фазу ЦС пару моих проектов. Кроме того, я надеюсь, что смогу настроить текст, изменить его на ближайшую дату начала до последней версии, изменить xlab и ylab и другие графические изменения, которые, как я считаю, возможны в пакете timleline().

Спасибо за любую помощь и, пожалуйста, дайте мне знать, если вам нужно какое-либо разъяснение!

+0

вам действительно нужны этикетки в сюжете ли? Потому что это будет довольно сложно с небольшими интервалами, которые у вас есть. Являются ли цветные блоки и легенда ок? – Heroka

+0

@ Heroka - Да, цветных блоков и легенд будет достаточно. – medavis6

ответ

2

Я решил использовать сегмент, а не ленту, потому что прямые линии и сегменты намного легче работать с дискретной осью y.

#make ordered factor so that sequence in legend matches sequence in plot 
data$Phase_ordered <- factor(data$Phase,levels=c("SD","DD","CD","PC","CA")) 

p1 <- ggplot(data,aes(x=StartDate, y=Project, color=Phase_ordered)) + 
    geom_segment(aes(x=StartDate,xend=EndDate,yend=Project),size=15) + 
scale_colour_discrete(guide=guide_legend(override.aes=list(size=7))) #or legend will be too big 
p1 

enter image description here

+0

Отлично! Огромное спасибо. Последний вопрос, когда я включил все мои фактические проекты, я получаю график [как это] (https://i.gyazo.com/ad88d11673ec96a9f20c49cc260dba5a.png), где StartDate становится нечетким и перекрывается. Я попытался включить 'scale_x_date()', но это дало мне ошибку «Дискретное значение, предоставленное для непрерывного масштабирования». Что я делаю не так? – medavis6

+0

Вы уверены, что дата - объект Date в вашем кадре данных? – Heroka

+0

Похоже, что это была одна из тех классических ошибок «недостающей запятой», которые так усугубляются. Спасибо, что вернулись и отлично! – medavis6

Смежные вопросы