How to modify my R code to plot this kind of gantt chart?

前端 未结 2 1974
轻奢々
轻奢々 2021-01-15 15:46

everybody

with the following code in R, I have display a simple gantt chart :

dat <- read.csv2(text=\"start;duration
 1;4
 7;3
 15;2
 \")
 plot(NA         


        
相关标签:
2条回答
  • 2021-01-15 16:04

    using package vistime:

    install.packages('vistime')
    library(vistime)
    df <- read.table(text="Task, Start, End
    A,2,7
    B,5,10
    C,5,12
    D,16,22
    E,18,20", header=TRUE, sep = ',')
    df$Start <- as.Date("2017-01-01") + df$Start
    df$End <- as.Date("2017-01-01") + df$End
    vistime(df, start="Start", end="End", events="Task")
    

    https://github.com/shosaco/vistime

    0 讨论(0)
  • 2021-01-15 16:20

    Extending the answer suggested by @Tyler Rinker:

    library(ggplot2)
    
    df <- read.table(text="Task, Start, End
    A,2,7
    B,5,10
    C,5,12
    D,16,22
    E,18,20", 
                     header=TRUE,
                     sep = ',')
    
    p <- ggplot(df, aes(colour=Task))
    p <- p + theme_bw()
    p <- p + geom_segment(aes(x=Start, 
                              xend=End, 
                              y=Task, 
                              yend=Task), 
                          size=2)
    p <- p + geom_point(aes(x=Start,
                            y=Task),
                        size=5)
    p <- p + geom_point(aes(x=End,
                            y=Task),
                        size=5)
    p <- p + geom_text(aes(x=Start-0.5,
                           y=Task,
                           label=Task),
                       fontface="bold")
    p <- p + opts(legend.position="None",
                  panel.grid.major = theme_blank(),
                  axis.text.y = theme_blank())
    p <- p + xlab("Duration")
    p
    

    Produces:

    ggplot2 Gantt Chart

    EDIT to produce centred labels

    library(ggplot2)
    
    df <- read.table(text="Task, Start, End
    A,2,7
    B,5,10
    C,5,12
    D,16,22
    E,18,20", 
                     header=TRUE,
                     sep = ',')
    
    df$TaskLabel <- df$Task
    df$Task <- as.numeric(df$Task)
    
    p <- ggplot(df, aes(colour=TaskLabel))
    p <- p + theme_bw()
    p <- p + geom_segment(aes(x=Start, 
                              xend=End, 
                              y=Task, 
                              yend=Task), 
                          size=2)
    p <- p + geom_point(aes(x=Start,
                            y=Task),
                        size=5)
    p <- p + geom_point(aes(x=End,
                            y=Task),
                        size=5)
    p <- p + geom_text(aes(x=(Start+End)/2,
                           y=Task+0.25,
                           label=TaskLabel),
                       fontface="bold")
    p <- p + opts(legend.position="None",
                  panel.grid.major = theme_blank(),
                  axis.text.y = theme_blank())
    p <- p + xlab("Duration")
    p
    

    Which in turn produces:

    ggplot2 with centred labels

    0 讨论(0)
提交回复
热议问题