Простая диаграмма Ганта с R (отображение нескольких линий)

Я хочу создать очень простую диаграмму Ганта с помощью RShiny и ggplot2. Я не хочу использовать пакеты или предопределенные диаграммы Ганта как здесь. Я предпочитаю создать диаграмму, построив несколько линий одна над другой и все они будут параллельны. Это не должно быть очень сложно, но у меня проблемы с фреймом данных за диаграммой.

У меня очень простой фрейм данных, например:

test_df_1 <- data.frame("x_1" = c(1,2,3),
                        "x_2" = c(2,4,5),
                         "y" = c(1,2,3),
                         "group" = c("A","B","C"))

Строки должны быть от 1 до 2 для y = 1, от 2 до 4 для y = 2 и т. Д. С помощью этих строк кода я получаю пустой график (но без сообщения об ошибке):

  output$test <- renderPlot({
       df_test <- data.frame(x_1=unlist(test_df_1$x_1), x_2=unlist(test_df_1$x_2), 
                             y=unlist(test_df_1$y), group=unlist(test_df_1$group))

       ggplot(data=df_test, aes(x=x_1, y=y, group=y)) +
          geom_line() +
          theme_bw()
       })

Я уверен в том, что я не «импортировал» x_2 в ggplot. Но я не знаю, как это сделать.

Когда я пробую фрейм данных в несколько другом порядке (который мне на самом деле не нужен):

test_df_2 <- data.frame("x_1" = c(1,2,2,4,3,5),
                        "y" = c(1,1,2,2,3,3),
                         "group" = c("A","","B","","C",""))

И нарисуйте это:

  output$test <- renderPlot({
       df_test <- data.frame(x_1=unlist(test_df_2$x_1), 
                             y=unlist(test_df_2$y), group=unlist(test_df_2$group))

       ggplot(data=df_test, aes(x=x_1, y=y, group=y)) +
          geom_line() +
          theme_bw()
       })

Я получаю ожидаемый результат.

Как мне получить желаемый многострочный график со структурой первого фрейма данных (test_df_1)?


person DerDressing    schedule 12.08.2019    source источник
comment
Из R for Data Science dplyr, ggplot2 и других пакеты в tidyverse предназначены для работы с аккуратными данными ..., поэтому вам нужно перенести test_df_1 во что-то похожее на test_df_2   -  person A. Suliman    schedule 12.08.2019


Ответы (1)


ggplot(data=df_test) +
  geom_linerange(aes(x = y, ymin = x_1, ymax = x_2)) +
  coord_flip()+
  theme_bw()

или без переворачивания:

ggplot(df_test, aes(x = x_1, y = y, group = group)) + 
  geom_segment(aes(xend = x_2, yend = y))
person David Klotz    schedule 12.08.2019
comment
Большой! Первый работает отлично. Но без переворачивания линии располагаются вертикально. - person DerDressing; 13.08.2019
comment
Это странно, потому что я получаю один и тот же сюжет для каждой версии - person David Klotz; 13.08.2019