本次内容介绍条形图的绘制,包括基本条形图、簇状条形图、频数条形图、堆积条形图、百分比条形图。
下次将介绍如何对条形图着色、调整条形图的宽度和间距、添加数据标签等内容。
1绘制基本条形图
演示数据
以gcookbook包中的pg_mean数据集为例。
# 加载gcookbook是为了调用pg_mean数据集
> library(gcookbook)
# pg_mean数据内容
> pg_mean
group weight
1 ctrl 5.032
2 trt1 4.661
3 trt2 5.526
绘图代码
ggplot(pg_mean,aes(x = group,y = weight)) + geom_col()
输出图片
简单美化
默认情况下,条形图的填充色为深灰色且无边框。我们可以通过fill参数改变填充色,colour为条形图添加边框线。这里我将填充色更改为亮黄色,边框线为黑色。注意,颜色要用""引起来哦!
ggplot(pg_mean,aes(x = group,y = weight)) + geom_col(fill="lightyellow",colour="black")
2绘制簇状条形图
演示数据
以gcookbook包中的cabbage_exp数据集为例,该数据集包含两个分类变量Cultivar和Date和一个连续变量Weight。
# cabbage_exp数据内容
> cabbage_exp
Cultivar Date Weight sd n se
1 c39 d16 3.18 0.9566144 10 0.30250803
2 c39 d20 2.80 0.2788867 10 0.08819171
3 c39 d21 2.74 0.9834181 10 0.31098410
4 c52 d16 2.26 0.4452215 10 0.14079141
5 c52 d20 3.11 0.7908505 10 0.25008887
6 c52 d21 1.47 0.2110819 10 0.06674995
绘图代码
将分类变量映射到fill参数上,并运行命令geom_col(position = 'dodge')。
ggplot(cabbage_exp,aes(x = Date,y = Weight,fill = Cultivar)) +
geom_col(position = 'dodge')
Tips:最基本的条形图通常只对应一个绘制在x轴上的分类变量和一个绘制在y轴上的连续型变量。
有时候,我们想额外添加一个分类变量跟x轴上的分类变量一起对数据进行分组。
此时,可通过将该分类变量映射给fill参数来绘制簇状条形图,这里的fill参数用来指定条形的填充色。
position='dodge'以使得两组条形在水平方向上错开排列,否则,系统会输出堆积条形图。
输出图片
3 绘制堆积条形图
演示数据
同上,以gcookbook包中的cabbage_exp数据集为例,该数据集包含两个分类变量Cultivar和Date和一个连续变量Weight。
# cabbage_exp数据内容
> cabbage_exp
Cultivar Date Weight sd n se
1 c39 d16 3.18 0.9566144 10 0.30250803
2 c39 d20 2.80 0.2788867 10 0.08819171
3 c39 d21 2.74 0.9834181 10 0.31098410
4 c52 d16 2.26 0.4452215 10 0.14079141
5 c52 d20 3.11 0.7908505 10 0.25008887
6 c52 d21 1.47 0.2110819 10 0.06674995
绘图代码
使用geom_col()函数,并映射一个变量给填充色参数(fill)即可。该命令会把Date对应到x轴,并以Cultivar作为填充色。
ggplot(cabbage_exp,aes(x = Date,y = Weight,fill = Cultivar)) + geom_col()
输出图片
反转图例顺序
我们可以通过guides()函数对图例顺序进行调整,指定图例所对应的需要调整的图例属性,本例中对应的是填充色(fill)。
ggplot(cabbage_exp,aes(x = Date,y = Weight,fill = Cultivar)) +
geom_col() +
guides(fill = guide_legend(reverse = T))
反转堆积顺序
可以通过position_stack(reverse = T)来实现。
ggplot(cabbage_exp,aes(x = Date,y = Weight,fill = Cultivar)) +
geom_col(position = position_stack(reverse = T)) +
guides(fill=guide_legend(reverse = T))
4 绘制百分比条形图
演示数据
同上,以gcookbook包中的cabbage_exp数据集为例,该数据集包含两个分类变量Cultivar和Date和一个连续变量Weight。
# cabbage_exp数据内容
> cabbage_exp
Cultivar Date Weight sd n se
1 c39 d16 3.18 0.9566144 10 0.30250803
2 c39 d20 2.80 0.2788867 10 0.08819171
3 c39 d21 2.74 0.9834181 10 0.31098410
4 c52 d16 2.26 0.4452215 10 0.14079141
5 c52 d20 3.11 0.7908505 10 0.25008887
6 c52 d21 1.47 0.2110819 10 0.06674995
绘图代码
用position = "fill",将y的值调整为0~1。
scale_y_continuous(labels=scales::percent),让标签以百分比的形式展示。
ggplot(cabbage_exp,aes(x = Date,y = Weight,fill = Cultivar)) +
geom_col(position = 'fill') +
scale_y_continuous(labels = scales::percent)
输出图片
5 绘制频数条形图
演示数据
以ggplot2包中的diamonds数据集为例。
> library(ggplot2)
> head(diamonds)
# A tibble: 6 x 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
4 0.29 Premium I VS2 62.4 58 334 4.2 4.23 2.63
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
6 0.24 Very Go~ J VVS2 62.8 57 336 3.94 3.96 2.48
绘图代码
使用geom_bar(),同时不要映射任何变量到y参数,geom_bar()函数在默认情况下将参数设定为stat = "bin",该操作会自动计算每组(根据x轴上面的变量进行分组)变量对应的观测值。
ggplot(diamonds,aes(x = cut)) + geom_bar()
输出图片