3

以下に示す 5 つのプロジェクトの時間枠データを視覚化したいと思います。現在、私は OpenOffice 描画アプリケーションを使用しており、以下に示すグラフを手動で作成しています。しかし、私は満足していません。以下の解決方法を教えていただけないでしょうか。ありがとうございました。

1. How can I produce somewhat similar graphs using R (or excel) with better precision in terms of days? 
2. Is there a way for better visualization of the data? If so, please let me know how to produce that using R or Excel. 

Project     Time
-------    ------ 
A   Feb 15 – March 1
B   March 15 – June 15
C   Feb 1 – March 15
D   April 10 – May 15
E   March 1 – June 30

ここに画像の説明を入力

4

2 に答える 2

4

ggplot2プロットを構築するための(合理的に)簡単な方法を提供します。

まず、データを に取り込む必要がありますR。開始日と終了日を何らかのDate形式にしたいR(私は を使用しましたDate)

library(ggplot2)
library(scales) # for date formatting with ggplot2

DT <- data.frame(Project = LETTERS[1:5], 
  start = as.Date(ISOdate(2012, c(2,3,2,4,3), c(15,15,1,10) )),
  end = as.Date(ISOdate(2012, c(3,5,3,5,6), c(1,15,15,15,30))))
# it is useful to have a numeric version of the Project column (
DT$ProjectN <- as.numeric(DT$Project)

テキストを配置する場所も計算する必要があります。plyr パッケージの `ddply1 を使用します。

library(plyr)
# find the midpoint date  for each project
DTa <- ddply(DT, .(ProjectN, Project), summarize, mid = mean(c(start,end)))

作成したい

  • 各プロジェクトの長方形なので、使用できますgeom_rect
  • 各中点のテキスト ラベル

プロットを作成する方法の例を次に示します

ggplot(DT) + 
   geom_rect(aes(colour = Project,ymin = ProjectN - 0.45, 
                ymax = ProjectN + 0.45,  xmin = start, xmax = end)), fill = NA) + 
  scale_colour_hue(guide = 'none') +  # this removes the legend
 geom_text(data = DTa, aes(label = Project, y = ProjectN, x = mid,colour = Project), inherit.aes= FALSE) + # now some prettying up to remove text / axis ticks
  theme(panel.background = element_blank(), 
        axis.ticks.y = element_blank(), axis.text.y = element_blank()) + # and add date labels
  scale_x_date(labels = date_format('%b %d'), 
  breaks = sort(unique(c(DT$start,DT$end))))+ # remove axis labels
  labs(y = NULL, x = NULL) 

ここに画像の説明を入力

于 2013-02-05T05:14:38.003 に答える
4

plotrix パッケージの gantt.chart 関数も確認できます。

library(plotrix)
?gantt.chart

ここに1つの実装があります

dmY.format<-"%d/%m/%Y"
gantt.info<-list(
  labels= c("A","B","C","D","E"),
  starts= as.Date(c("15/02/2012", "15/03/2012", "01/02/2012", "10/04/2012","01/03/2012"),
                  format=dmY.format),
  ends= as.Date(c("01/03/2012", "15/06/2012", "15/03/2012", "15/05/2012","30/06/2012"),
                format=dmY.format)
  )

vgridpos<-as.Date(c("01/01/2012","01/02/2012","01/03/2012","01/04/2012","01/05/2012","01/06/2012","01/07/2012","01/08/2012"),format=dmY.format)
vgridlab<-
  c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug")

gantt.chart(gantt.info, xlim= c(as.Date("01/01/2012",format=dmY.format), as.Date("01/08/2012",format=dmY.format)) , main="Projects duration",taskcolors=FALSE, border.col="black",
            vgridpos=vgridpos,vgridlab=vgridlab,hgrid=TRUE)

ここに画像の説明を入力

私もggplot2を試しました。しかし、mnel は私よりも速かった。これが私のコードです

data1 <- as.data.frame(gantt.info)
data1$order <- 1:nrow(data1)

library(ggplot2)

ggplot(data1, aes(xmin = starts, xmax = ends, ymin = order, ymax = order+0.5)) + geom_rect(color="black",fill=FALSE) + theme_bw()  + geom_text(aes(x= starts + (ends-starts)/2 ,y=order+0.25, label=labels)) +  ylab("Projects") + xlab("Date") 

ここに画像の説明を入力

于 2013-02-05T05:49:00.220 に答える