在R中获得堆积区域图

sfa*_*tor 21 plot r ggplot2 reshape stacked-area-chart

这个问题是我提出的上一个问题的延续.

现在我有一个案例,其中还有一个带有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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我需要在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%
Run Code Online (Sandbox Code Playgroud)

所以现在我将在每小时得到每个类别的份额然后绘制这是一个像这样的堆积区域图,其中x轴是小时,y轴是由不同颜色给出的每个类别的Prop2的百分比这个

jub*_*uba 28

您可以使用ggplot2Hadley Wickham 的包裹.

R> library(ggplot2)
Run Code Online (Sandbox Code Playgroud)

示例数据集:

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
Run Code Online (Sandbox Code Playgroud)

然后你就可以使用ggplotgeom_area:

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

在此输入图像描述


Jam*_*mes 9

你可以stackpolyplotrix包中使用:

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]))
Run Code Online (Sandbox Code Playgroud)