《R数据可视化手册》一3.8 绘制百分比堆积条形图

本节书摘来自异步社区《R数据可视化手册》一书中的第3章,第3.8节,作者 【美】Winston Chang,更多章节内容可以访问云栖社区“异步社区”公众号查看

3.8 绘制百分比堆积条形图

问题
如何绘制可展示百分比的堆积条形图(又叫百分比堆积条形图)?

方法
首先,通过plyr包中的ddply()函数和transform()函数将每组条形对应的数据标准化为100%格式,之后,针对计算得到的结果绘制堆积条形图即可,如图3-20所示。

library(gcookbook) # 为了使用数据
library(plyr)
# 以Date为切割变量()对每组数据进行transform()
ce <- ddply(cabbage_exp, "Date", transform,
       percent_weight = Weight / sum(Weight) * 100)

ggplot(ce, aes(x=Date, y=percent_weight, fill=Cultivar)) +
  geom_bar(stat="identity")


《R数据可视化手册》一3.8 绘制百分比堆积条形图_第1张图片

讨论
我们用ddply()函数计算每组Date变量对应的百分比。本例中,ddply()函数根据指定的变量Date对数据框cabbage_exp进行分组,并对各组数据执行transform()函数(ddply()函数中设定的其他参数也会传递给该函数)。

下面是cabbage_exp数据,从中可以看出ddply()命令对其进行操作的过程。

cabbage_exp

 Cultivar Date Weight    sd n     se
   c39 d16  3.18 0.9566144 10 0.30250803
   c39 d20  2.80 0.2788867 10 0.08819171
   c39 d21  2.74 0.9834181 10 0.31098410
   c52 d16  2.26 0.4452215 10 0.14079141
   c52 d20  3.11 0.7908505 10 0.25008887
   c52 d21  1.47 0.2110819 10 0.06674995

ce <- ddply(cabbage_exp, "Date", transform,
       percent_weight = Weight / sum(Weight) * 100)

Cultivar Date Weight    sd n     se percent_weight
   c39 d16  3.18 0.9566144 10 0.30250803    58.45588
   c52 d16  2.26 0.4452215 10 0.14079141    41.54412
   c39 d20  2.80 0.2788867 10 0.08819171    47.37733
   c52 d20  3.11 0.7908505 10 0.25008887    52.62267
   c39 d21  2.74 0.9834181 10 0.31098410    65.08314
   c52 d21  1.47 0.2110819 10 0.06674995    34.91686

计算出百分比之后,就可以按照绘制常规堆积条形图的方法来绘制百分比堆积条形图了。

跟常规堆积条形图一样,我们可以调整百分比堆积条形图的图例顺序、更换调色板及添加边框线,如图3-21所示。

ggplot(ce, aes(x=Date, y=percent_weight, fill=Cultivar)) +
  geom_bar(stat="identity", colour="black") +
  guides(fill=guide_legend(reverse=TRUE)) +
  scale_fill_brewer(palette="Pastel1")


《R数据可视化手册》一3.8 绘制百分比堆积条形图_第2张图片

参见
更多关于分组对数据进行变换的内容可参见15.16节。

你可能感兴趣的:(《R数据可视化手册》一3.8 绘制百分比堆积条形图)