4

Hadoop クラスターで Pig ジョブを実行し、一連のデータを R がコホート分析を実行できるように処理しました。次のスクリプトがあり、最後の行から 2 番目の時点で、次の形式のデータがあります。

> names(data)
[1] "VisitWeek" "ThingAge"    "MyMetric"

VisitWeek は日付です。ThingAge と MyMetric は整数です。

データは次のようになります。

2010-02-07     49  12345

私がこれまでに持っているスクリプトは次のとおりです。

# Load ggplot2 for charting 
library(ggplot2);

# Our file has headers - column names
data = read.table('weekly_cohorts.tsv',header=TRUE,sep="\t");

# Print the names
names(data)

# Convert to dates
data$VisitWeek = as.Date(data$VisitWeek)
data$ThingCreation = as.Date(data$ThingCreation)

# Fill in the age column
data$ThingAge = as.integer(data$VisitWeek - data$ThingCreation)

# Filter data to thing ages lt 10 weeks (70 days) + a sanity check for gt 0, and drop the creation week column
data = subset(data, data$ThingAge <= 70, c("VisitWeek","ThingAge","MyMetric"))
data = subset(data, data$ThingAge >= 0)

print(ggplot(data, aes(x=VisitWeek, y=MyMetric, fill=ThingAge)) + geom_area())

この最後の行は機能しません。私は多くのバリエーション、バー、ヒストグラムを試しましたが、いつものように R ドキュメントは私を打ち負かします。

標準の Excel スタイルの積み上げ面グラフ (ThingAge ごとに 1 つの時系列を x 軸に週単位で積み上げ、y 軸に日付) を表示したいと考えています。この種のグラフの例は次のとおりです: http://upload.wikimedia.org/wikipedia/commons/a/a1/Mk_Zuwanderer.png

ここのドキュメントを読みました: http://had.co.nz/ggplot2/geom_area.htmlhttp://had.co.nz/ggplot2/geom_histogram.htmlおよびこのブログhttp://chartsgraphs.wordpress。 com/2008/10/05/r-lattice-plot-beats-excel-stacked-area-trend-chart/ですが、うまく機能させることができません。

どうすればこれを達成できますか?

4

4 に答える 4

5
library(ggplot2)
set.seed(134)
df <- data.frame(
    VisitWeek = rep(as.Date(seq(Sys.time(),length.out=5, by="1 day")),3),
    ThingAge = rep(1:3, each=5),
    MyMetric = sample(100, 15))

ggplot(df, aes(x=VisitWeek, y=MyMetric)) + 
    geom_area(aes(fill=factor(ThingAge)))

下の画像を教えてください。あなたの問題は、面積プロットの塗りつぶしマッピングを正しく指定することにあると思います。fill=factor(ThingAge)

ここに画像の説明を入力

于 2010-02-11T09:09:03.267 に答える
2

ggplot(data.set, aes(x = Time, y = Value, color = Type)) + geom_area(aes(fill = Type), position = 'stack')

geom_area に fill 要素を指定し、それを積み重ねる必要があります (ただし、それがデフォルトである可能性があります)。

ここにあります http://www.mail-archive.com/r-help@r-project.org/msg84857.html

于 2010-02-11T00:23:36.837 に答える
2

私はこれで私の結果を得ることができました:

https://stat.ethz.ch/pipermail/r-help/2005-August/077475.htmlからstackedPlot()関数をロードしました

関数(私のものではありません。リンクを参照)は次のとおりです。


stackedPlot = function(data, time=NULL, col=1:length(data), ...) {

  if (is.null(time))
    time = 1:length(data[[1]]);

  plot(0,0
       , xlim = range(time)
       , ylim = c(0,max(rowSums(data)))
       , t="n" 
       , ...
       );

  for (i in length(data):1) {

    # Die Summe bis zu aktuellen Spalte
    prep.data = rowSums(data[1:i]);

    # Das Polygon muss seinen ersten und letzten Punkt auf der Nulllinie haben
    prep.y = c(0
                , prep.data
                , 0
                )

    prep.x = c(time[1]
                , time
                , time[length(time)]
                )

    polygon(prep.x, prep.y
            , col=col[i]
            , border = NA
            );
  }
}

次に、データをワイド形式に再形成しました。それからうまくいきました!


wide = reshape(data, idvar="ThingAge", timevar="VisitWeek", direction="wide");
stackedPlot(wide);
于 2010-02-11T01:46:38.153 に答える
2

整数を因数に変換し、geom_area ではなく geom_bar を使用するとうまくいきました。

df<-expand.grid(x=1:10,y=1:6)
df<-cbind(df,val=runif(60))
df$fx<-factor(df$x)
df$fy<-factor(df$y)
qplot(fy,val,fill=fx,data=df,geom='bar')
于 2010-02-11T05:38:25.713 に答える