写在前面。
条形图一般用来展示不同分类下(x轴)某个数值型变量的取值(y轴)。注意,条形的高度,有时是变量的频数
,有时是变量的取值本身
,需要注意区分。
条形图
我没有按照书中的章节顺序,而是根据条形高度映射数据类型
、图形位置
和图形元素
进行了分类整合,使脉络更清晰,知识点更集中。
同时随着ggplot2包的更新,书中的一些用法也已经不适用了,因此会做一些更正。
所使用的一些示例数据需要安装加载包gcookbook,同时也需要加载ggplot2。
if(!require(gcookbook) ) install.packages("gcookbook")
library(gcookbook)
library(ggplot2)
另外,ggplot2绘图的常用基本语句需要知道:
ggplot(data = , aes(x= , y = ) ) + geom_xxxx() + ...
2. 图形位置
在ggplot
语句中,通过映射一个分类变量给aes
语句的fill
参数,根据不同的变量值给条形分配不同的填充颜色
,然后设定不同的位置排列
,分为簇状(并排排列)
和堆积
两种。
2.1 簇状条形图
使用示例数据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
将Cultivar
映射给fill
参数,并设置position= "dodge"(水平方向错开)
。
映射给y
的是确定的值,因此stat="identity"
。
ggplot(data = cabbage_exp, aes(x= Date ,y = Weight, fill = Cultivar )) +
geom_bar(position = "dodge", stat = "identity")
[图片上传失败...(image-7b5dc3-1694565251399)]
注意,映射给fill
的变量也是离散型变量
。
可以通过scale_fill_brewer()
或者scale_fill_manual()
对填充颜色进行设置:
ggplot(data = cabbage_exp, aes(x= Date ,y = Weight, fill = Cultivar )) +
geom_bar(position = "dodge", stat = "identity") +
scale_fill_manual(values = c('#01008B', '#DC010C'))
[图片上传失败...(image-f112a3-1694565251399)]
注意,如果分类变量有缺失值
,图形会被略去不绘制,被临近色块扩充。
这里我们手动删掉一个观测,造成分类变量缺失值。
> cabbage_exp[1:5,]
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
然后再绘制。
ggplot(data = cabbage_exp[1:5,], aes(x= Date ,y = Weight, fill = Cultivar )) +
geom_bar(position = "dodge", stat = "identity") +
scale_fill_manual(values = c('#01008B', '#DC010C'))
[图片上传失败...(image-ac5a82-1694565251399)]