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