条形图通常用来展示不同的分类下某个数值变量的取值。
绘制条形图需要特别注意一个重要细节:有时条形图的条形高度表示的是数据集中变量的频数,有时则表示变量取值本身。牢记这个区别,因为它太容易让人混淆啦,两者与数据集的对应关系不同,但又对应同样的术语。
绘制简单条形图
使用ggplot()
函数和geom_bar(stat="identity")
绘制条形图(y轴对应的是变量取值本身)。
library(gcookbook) # 导入数据
library(ggplot2) # 导入画图包
ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity")
当x
是连续变量时,ggplot
不是只在实际取值处绘制条形,而将在x轴上介于最大值和最小值之间的所有可能的取值处绘制条形。如果碰到这种情况,我们需要先将其转换为因子变量。
默认情况条形图的填充色为黑灰色且条形图没有边框线,我们可以使用fill
与colour
参数来设置改变它们。
ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity", fill="lightblue", colour="black")
注意这里参数colour
为英式的,我们也可以用美式拼法color
,它们在底层指向相同的映射,所以效果一致。
绘制簇状条形图
将分类变量映射到fill
参数,并运行命令geom_bar(position="dodge")
。
下面以cabbage_exp
数据集为例演示一下绘图过程。
library(gcookbook)
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
分布将Date
与Cultivar
映射给x
和fill
。
library(ggplot2)
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
geom_bar(position="dodge", stat="identity")
有时候我们想额外添加一个分类变量跟x轴上的分类变量一起对数据进行分组,此时,可通过将该分类变量映射给fill
参数来绘制簇状条形图。
下面对上图作一些修改。
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
geom_bar(position="dodge", stat="identity", color="black") +
scale_fill_brewer(palette = "Pastel1")
我们通过将geom_bar()
中的参数指定为color="black"
为条形图添加黑色边框线;用scale_fill_brewer()
或scale_fill_manual()
函数对图形的颜色进行设置。上图我们使用了RColorBrewer
包中的Pastel1
调色板对图形进行调色。
绘制频数条形图
将数据集中的每行数据对应于一个样本,针对样本的频数绘制条形图。
ggplot(diamonds, aes(x=cut)) + geom_bar()
# 等价于使用geom_bar(stat="bin")
diamonds
数据集共有50,000+行数据,每行数据对应一颗钻石的品质信息。
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.20 4.23 2.63
## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48