2

私はRに非常に慣れていないので、優しくしてください。

タイムスタンプといくつかのデータを含むデータセットがあります。ここで、次のようなグラフを描きたいと思います。

  • データは、たとえば 60 分間隔でグループ化され、
  • いくつかのパーセンタイル ラインが描画されます。

時間を x 軸に、ギャップを y 軸にしたグラフを作成したいと思います。boxplot のようなものを想像しますが、より良い概要を得るために - 測定が長いので - ボックスの代わりに、

  • 平均値、
  • 3パーセンタイル、
  • 97パーセンタイルと
  • 100パーセンタイル

データの例を次に示します。

> head(B, 10)
                        times     gaps
1  2013-06-10 15:40:02.654168 1.426180
2  2013-06-10 15:40:18.936882 2.246462
3  2013-06-10 15:40:35.215668 3.227132
4  2013-06-10 15:40:48.328785 1.331284
5  2013-06-10 15:40:53.809485 1.294128
6  2013-06-10 15:41:04.027745 2.292671
7  2013-06-10 15:41:25.876519 1.293501
8  2013-06-10 15:41:42.929280 1.342166
9  2013-06-10 15:42:11.700626 3.203901
10 2013-06-10 15:42:23.059550 1.304467

cut を使用してデータを分割できます。

C <- table(cut(B, breaks="hour"))

また

C <- data.frame(cut(B, breaks="hour"))

しかし、どうすればこれからグラフを描くことができますか? グループのギャップ値にアクセスする方法がわかりません。そうでなければ私はできた

quantile(C$gaps, c(.03, .5, .97, 1))

ラモンの助けを前もってありがとう

4

1 に答える 1

2

確かな質問。の興味深い「機能」を説明するこれを見つけるまで、私は髪を引っ張っていましたplyr。そのため、このソリューションでは ggplot、plyr、reshape2 を使用します。うまくいけば、R の優れた入門書となります。数日にわたってカットを追加する必要がある場合は、ddply() に変数を追加することでそれを行うこともできます。

library(plyr)
library(reshape2)
library(ggplot2)
Hs <- read.table(
  header=TRUE, text='
dates times     gaps
1  2013-06-10 15:40:02.654168 1.426180
2  2013-06-10 15:40:18.936882 2.246462
3  2013-06-10 15:40:35.215668 3.227132
4  2013-06-10 15:40:48.328785 1.331284
5  2013-06-10 15:40:53.809485 1.294128
6  2013-06-10 15:41:04.027745 2.292671
7  2013-06-10 16:41:25.876519 1.293501
8  2013-06-10 16:41:42.929280 1.342166
9  2013-06-10 16:42:11.700626 3.203901
10 2013-06-10 16:42:23.059550 1.304467')
Hs$dates <- paste(Hs$date, Hs$times, sep = " ")
Hs$dates <- strptime(Hs$date, "%Y-%m-%d %H:%M:%S")
class(Hs$dates) # "POSIXlt" "POSIXt" 
Hs$h1 <- Hs$dates$hour
Hs$dates <- as.POSIXct(strptime(Hs$date, "%Y-%m-%d %H:%M:%S"))
class(Hs$dates) # "POSIXct" "POSIXt" 
library(ggplot2)
ggplot(Hs, aes(factor(h1), gaps)) + 
  geom_boxplot(fill="white", colour="darkgreen") # easy way!  Traditional boxplot.
ggplot(Hs, aes(factor(h1), gaps)) + geom_boxplot() +
      stat_boxplot(coef = 1.7, fill="white", colour="darkgreen") 

「coef = 1.7」を追加してもうまくいくかどうかはわかりません。そうでない場合は、サマリーテーブルを介して値を作成し続けてください。

cuts <- c(.03, .5, .97, 1)
x <- ddply(Hs, .(h1), function (x)
{summarise(x, y = quantile(x$gaps, cuts))})
x$cuts <- cuts
x <- dcast(x, h1 ~ cuts, value.var = "y")
x.melt <- melt(x, id.vars = "h1")

これは、あなたが要求した行と、楽しみのための別のボックス プロットです。

ggplot(x.melt, aes(x = h1, y = value, color = variable)) + geom_point(size = 5) + 
  geom_line() + scale_colour_brewer(palette="RdYlBu") + xlab("hours")
ggplot(x, aes(factor(h1),  ymin = 0, lower = `0.03`, middle = `0.5`,
                     upper = `0.97`, ymax = `1`)) + 
         geom_boxplot(stat = "identity", fill="white", colour="darkgreen")

geom_line

カスタム箱ひげ図

お役に立てれば。

于 2013-06-12T15:51:03.447 に答える