《R数据可视化手册》——3.7 绘制堆积条形图

3.7 绘制堆积条形图

问题
如何绘制堆积条形图?

方法
使用geom_bar()函数,并映射一个变量给填充色参数(fill)即可。该命令会将Date对应到x轴上,并以Cultivar作为填充色,如图3-16所示。

library(gcookbook) # 为了使用数据
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
  geom_bar(stat="identity")

讨论
弄清楚图形对应的数据结构有助于理解图形的绘制过程。上例数据集中Date变量对应于三个水平、Cultivar变量对应于两个水平,两个变量不同水平的组合又分别与一个Weight变量相对应:

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

默认绘制的条形图有一个问题,即条形的堆积顺序与图例顺序是相反的。我们可以通过guides()函数对图例顺序进行调整,并指定图例所对应的需要调整的图形属性,本例中对应的是填充色(fill),如图3-17所示。

ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
  geom_bar(stat="identity") +
  guides(fill=guide_legend(reverse=TRUE))

如果你想调整条形的堆叠顺序,可以通过指定图形映射中的参数order=desc()来实现:

library(plyr) # 为了使用desc()函数
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar, order=desc(Cultivar))) +
  geom_bar(stat="identity")

当然,也可以通过调整数据框中对应列的因子顺序来实现上述操作(参见15.8节),但需谨慎进行该操作,因为对数据进行修改可能导致其他分析结果也发生改变。

为了获得效果更好的条形图,我们保持逆序的图例顺序不变,同时,使用scale_fill_brewer()函数得到一个新的调色板,最后设定colour="black"为条形添加一个黑色边框线(如图3-19所示)。

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

另见
更多关于条形图着色的内容可参见3.4节。

将因子根据另一个变量重新排列水平顺序的内容可参见15.9节。手动更改因子水平顺序的内容,可参见15.8节。

时间: 2024-09-22 20:31:12

《R数据可视化手册》——3.7 绘制堆积条形图的相关文章

《R数据可视化手册》——3.4 条形图着色

3.4 条形图着色 问题如何将条形图中的条形设定为不同的颜色? 方法将合适的变量映射到填充色(fill)上即可. 这里以数据集uspopchange为例.该数据集描述了美国各州人口自2000年到2010年的变化情况.我们选取出人口增长最快的十个州进行绘图.图中会根据地区信息(东北部.南部.中北部.西部)对条形进行着色. 首先,选取出人口增长最快的十个州: library(gcookbook) #为了使用数据 upc <- subset(uspopchange, rank(Change)>40)

《R数据可视化手册》一第3章 条形图3.1 绘制简单条形图

第3章 条形图 R数据可视化手册 条形图也许是最常用的数据可视化方法,通常用来展示不同的分类下(在x轴上)某个数值型变量的取值(在y轴上).例如,条形图可以用来形象地展示四种不同商品的价格情况,但不适宜用来展示商品价格随时间的变动趋势,因为这里时间是一个连续变量--尽管我们也可以这么做,后面会看到这种情形. 绘制条形图时需特别注意一个重要的细节:有时条形图的条形高度表示的是数据集中变量的频数,有时则表示变量取值本身.牢记这个区别--这里极易混淆,因为两者与数据集的对应关系不同,但又对应同样的术语

《R数据可视化手册》一第2章 快速探索数据2.1 绘制散点图

第2章 快速探索数据 R数据可视化手册虽然本书中大部分图形都是通过ggplot2包绘制的,但这并不是R绘制图形的唯一方法.要快速探索数据,有时使用R基础包中的绘图函数会很有用.这些函数随R软件默认安装,无需另行安装附加包.它们简短易输入,处理简单问题时使用方便,且运行速度极快. 如果你想绘制较为复杂的图形,那么,转用ggplot2包通常是更好的选择.部分原因在于ggplot2提供了一个统一的接口和若干选项来替代基础绘图系统中对图形的修修补补和各种特例.一旦掌握了ggplot2的工作机制,你就可以

《R数据可视化手册》一导读

前 言 R数据可视化手册几年前读研时我开始用R,主要用来分析我在科研工作中收集到的数据.我使用R首先是想摆脱SPSS这样的统计软件的禁锢,即严格的环境和死板的分析.更何况,R是免费的,所以我用不着说服别人为我购买一套这样的软件--这对一个穷研究生来说是相当的重要!此后,随着我对R的了解不断深入,我才发现原来R还可以绘制出非常优秀.动人的数据图形. 本书的每个"技巧"中,都列出了一个问题和对应的解决方法.在大多数情况下,我提供的并不是R中唯一的实现方法,但却是我认为的最佳方案.R如此受欢

《R数据可视化手册》——导读

前言 R数据可视化手册几年前读研时我开始用R,主要用来分析我在科研工作中收集到的数据.我使用R首先是想摆脱SPSS这样的统计软件的禁锢,即严格的环境和死板的分析.更何况,R是免费的,所以我用不着说服别人为我购买一套这样的软件--这对一个穷研究生来说是相当的重要!此后,随着我对R的了解不断深入,我才发现原来R还可以绘制出非常优秀.动人的数据图形. 本书的每个"技巧"中,都列出了一个问题和对应的解决方法.在大多数情况下,我提供的并不是R中唯一的实现方法,但却是我认为的最佳方案.R如此受欢迎

《R数据可视化手册》——第2章 快速探索数据

第2章 快速探索数据 R数据可视化手册虽然本书中大部分图形都是通过ggplot2包绘制的,但这并不是R绘制图形的唯一方法.要快速探索数据,有时使用R基础包中的绘图函数会很有用.这些函数随R软件默认安装,无需另行安装附加包.它们简短易输入,处理简单问题时使用方便,且运行速度极快. 如果你想绘制较为复杂的图形,那么,转用ggplot2包通常是更好的选择.部分原因在于ggplot2提供了一个统一的接口和若干选项来替代基础绘图系统中对图形的修修补补和各种特例.一旦掌握了ggplot2的工作机制,你就可以

《R数据可视化手册》——第3章 条形图

第3章 条形图 R数据可视化手册条形图也许是最常用的数据可视化方法,通常用来展示不同的分类下(在x轴上)某个数值型变量的取值(在y轴上).例如,条形图可以用来形象地展示四种不同商品的价格情况,但不适宜用来展示商品价格随时间的变动趋势,因为这里时间是一个连续变量--尽管我们也可以这么做,后面会看到这种情形. 绘制条形图时需特别注意一个重要的细节:有时条形图的条形高度表示的是数据集中变量的频数,有时则表示变量取值本身.牢记这个区别--这里极易混淆,因为两者与数据集的对应关系不同,但又对应同样的术语.

《R数据可视化手册》一第1章 R基础1.1 安装包

第1章 R基础 R数据可视化手册本章包括以下基础知识:安装包.使用包和加载数据. 如果你想快速上手,本书大多数技巧都需要安装ggplot2和gcookbook包.运行下面命令来安装: install.packages(c("ggplot2", "gcookbook"))然后,在每个R会话中,你需要在运行本书的例子之前先加载它们: library(ggplot2)library(gcookbook)附录A提供了一个关于ggplot2绘图包的简介,主要是面向不熟悉ggp

《R数据可视化手册》——第1章 R基础

第1章 R基础 R数据可视化手册本章包括以下基础知识:安装包.使用包和加载数据. 如果你想快速上手,本书大多数技巧都需要安装ggplot2和gcookbook包.运行下面命令来安装: install.packages(c("ggplot2", "gcookbook"))``` 然后,在每个R会话中,你需要在运行本书的例子之前先加载它们: library(ggplot2)library(gcookbook)`附录A提供了一个关于ggplot2绘图包的简介,主要是面向不

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

3.8 绘制百分比堆积条形图 问题如何绘制可展示百分比的堆积条形图(又叫百分比堆积条形图)? 方法首先,通过plyr包中的ddply()函数和transform()函数将每组条形对应的数据标准化为100%格式,之后,针对计算得到的结果绘制堆积条形图即可,如图3-20所示. library(gcookbook) # 为了使用数据 library(plyr) # 以Date为切割变量()对每组数据进行transform() ce <- ddply(cabbage_exp, "Date"