21

この質問は、私が尋ねた前の質問の続きです。

現在、Prop を含むカテゴリ列もある場合があります。そのため、データセットは次のようになります。

Hour  Category        Prop2

00     A            25
00     B            59
00     A            55
00     C            5
00     B            50
...
01     C            56
01     B            45
01     A            56
01     B            35
...
23     D            58
23     A            52
23     B            50
23     B            35
23     B            15

この場合、R で積み上げ面プロットを作成し、これらの異なるカテゴリのパーセンテージを日ごとに作成する必要があります。したがって、結果は次のようになります。

        A         B       C        D
00     20%       30%     35%       15% 
01     25%       10%     40%       25%
02     20%       40%     10%       30% 
.
.
.
20 
21
22     25%       10%     30%       35%
23     35%       20%     20%       25%

だから今、私は各時間の各カテゴリのシェアを取得し、これを次のような積み上げ面プロットにプロットします。x 軸は時間で、y 軸は各カテゴリの Prop2 のパーセンテージを異なる色で示していますこれ

4

3 に答える 3

29

ggplot2そのためにハドリーウィッカムのパッケージを使用できます。

R> library(ggplot2)

データセットの例:

R> d <- data.frame(t=rep(0:23,each=4),var=rep(LETTERS[1:4],4),val=round(runif(4*24,0,50)))
R> head(d,10)
   t var val
1  0   A   1
2  0   B  45
3  0   C   6
4  0   D  14
5  1   A  35
6  1   B  21
7  1   C  13
8  1   D  22
9  2   A  20
10 2   B  44

そして、あなたはで使用することができggplotますgeom_area

R> ggplot(d, aes(x=t,y=val,group=var,fill=var)) + geom_area(position="fill")

ここに画像の説明を入力してください

于 2011-02-17T15:13:40.993 に答える
10

パッケージstackpolyから使用できます:plotrix

library(plotrix)
#create proportions table
pdat <- prop.table(xtabs(Prop2~Hour+Category,Dat),margin=1)
#draw chart
stackpoly(pdat,stack=T,xaxlab=rownames(pdat))
#add legend
legend(1,colnames(pdat),bg="#ffffff55",fill=rainbow(dim(pdat)[2]))
于 2011-02-17T15:02:11.547 に答える
-2

境界線を取り除きたい場合は、scale_x_discretecoord_cartesianをこのように使用できます

 p <- ggplot(d, aes(x=Date,y=Volume,group=Platform,fill=Platform)) + geom_area(position="fill")
 base_size <- 9
 p + theme_set(theme_bw(base_size=9)) + scale_x_discrete(expand = c(0, 0)) +  coord_cartesian(ylim=c(0,1))
于 2012-04-19T12:08:58.220 に答える