3

タイムスケールでプロットを積み上げたい。以下は私のデータです:

 Flight_No Dest      Date  Time STD.60 STD.45      Date2          start       end
1    ab0729  KP 14-Oct-13 00:05      1      0 2013-10-14 2013-10-14 00:05:00 2013-10-14 00:20:00
2    ab8063  KI 14-Oct-13 00:20      0      3 2013-10-14 2013-10-14 00:20:00 2013-10-14 00:35:00
3    ab0337  ST 14-Oct-13 00:30      1      0 2013-10-14 2013-10-14 00:30:00 2013-10-14 00:45:00

以下は、グラフをプロットする私のコードです。

data$Total<-data$STD.60+data$STD.45    
ggplot(data,aes(x=start,y=Total,xmin=start,xmax=end,ymin=0,ymax=Total,alpha=0,fill=factor(Dest)))+geom_rect()

上記はこのグラフを生成します:

ここに画像の説明を入力

ただし、重複がある場合は常にこれらの四角形を積み重ねたいと考えています。つまり、00:30 から 00:35 の間、y 軸の値は 3 ではなく 4 として表示されます。

助けてください。

4

2 に答える 2

2

(1) 時間軸を 5 分幅のビンに分割する、(2) 長い形式でデータを再構築する、(3) のスタック機能を利用する、に依存するソリューションを次に示しますgeom_bar(position="stack")

ここに画像の説明を入力

dat = structure(list(Dest = c("KP", "KI", "ST"), Total = c(1L, 3L, 1L), 
    start = structure(c(1381730700, 1381731600, 1381732200), 
    class = c("POSIXct", "POSIXt"), tzone = ""), 
    end = structure(c(1381731600, 1381732500, 1381733100), 
    class = c("POSIXct", "POSIXt"), tzone = "")), 
    .Names = c("Dest", "Total", "start", "end"), 
    class = "data.frame", row.names = c(NA, -3L))

# Use loop to split each row of data into bins.
Time = as.POSIXct(vector())
Dest = vector("character", length=0)
Total = vector("integer", length=0)

for (i in seq(nrow(dat))) {
    times = seq(from=dat[i, "start"], to=dat[i, "end"], by="5 min")
    times = head(times, -1) # Remove last element.
    Time = c(Time, times)
    Dest = c(Dest,  rep(dat[i, "Dest"],  length(times)))
    Total= c(Total, rep(dat[i, "Total"], length(times)))
}

dat2 = data.frame(Time, Total, Dest)

library(ggplot2)
p = ggplot(dat2, aes(x=Time, y=Total, fill=Dest)) + 
    geom_bar(stat="identity", position="stack", width=300, color="grey30")

ggsave("plot.png", plot=p, width=10, height=4.5, dpi=120)

ノート:

  1. 引数を変更することで、ビンの幅を変更できseq(..., by=ます。を参照してください?seq.POSIXt
  2. startビニング プロセスを容易にするために、とendの時間を最も近い x 分に丸めることができます。
  3. geom_bar(..., width=300)5 分が 300 秒あるため、機能します。必要に応じて調整します。
  4. X 軸の目盛りはバーの中央にありますが、実際にはバーの左端に適用されます。scale_x_datetime(breaks=@agstudy で示されているように調整します。
于 2013-11-10T08:40:52.373 に答える