《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")

df26f81cb8713f8f954284a774639136e96a6947

讨论
我们用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")

33bd49a461aa5719bd7aec83b964e362d7f907e4

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

相关文章
|
SQL Oracle 关系型数据库
Oracle查询优化-查询只包含数字或字母的数据
【2月更文挑战第4天】【2月更文挑战第10篇】查询只包含数字或字母的数据
1598 1
|
小程序
企业人才招聘小程序模板源码
企业人才招聘小程序模板源码
254 3
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
2611 60
|
存储 监控 Linux
在 CentOS 7 中如何对新硬盘进行分区、格式化、挂载及配置最佳实践
本文详细介绍了在 CentOS 7 中如何对新硬盘进行分区、格式化、挂载及配置最佳实践,包括使用 `fdisk` 创建分区、`mkfs` 格式化分区、创建挂载点、编辑 `/etc/fstab` 实现永久挂载等步骤,旨在有效管理服务器磁盘空间,提高系统稳定性和可维护性。
2985 1
|
数据处理 Python
Pandas中的drop_duplicates()方法详解
Pandas中的drop_duplicates()方法详解
1611 2
|
数据挖掘
R实战 | 限制性立方样条(RCS)
R实战 | 限制性立方样条(RCS)
2219 0
|
网络协议 Unix Linux
🌹史上最全的后端必备Linux常用命令汇总(超全面!超详细!)收藏这一篇就够了!🌹
 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器操作系统方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。目前Linux存在着许多不同的Linux发行版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机。
1099 2
🌹史上最全的后端必备Linux常用命令汇总(超全面!超详细!)收藏这一篇就够了!🌹
|
资源调度 数据可视化 安全
一文搞懂:全网最全卡方检验汇总
一文搞懂:全网最全卡方检验汇总
1450 0
|
数据采集 搜索推荐 数据可视化
使用R语言进行药物动力学分析
【4月更文挑战第27天】R语言在药物动力学分析中扮演关键角色,用于数据处理(如dplyr, readr, tidyr包)、模型建立(如drc包的一室、多室模型)、参数估计(nls, nlsList, lme4, FME包)及结果解释(summary, predict, plot, boot, bayesplot包)。通过实例,展示了如何使用R建立药物吸收和清除模型,助力药物研发和个性化医疗。随着数据分析技术发展,R在药物动力学领域的应用将更加广泛。
599 1
|
Perl
sed删除不匹配正则表达式的行(保留匹配行)
sed删除不匹配正则表达式的行(保留匹配行)
1428 2