- R数据可视化手册(第2版)
- (美)温斯顿·常
- 828字
- 2025-04-05 09:52:10
2.3 绘制条形图
问题
如何绘制条形图?
方法
要绘制条形图(见图2-5左图),可以使用barplot()
函数,并向其传递两个向量作为参数,第一个向量用来设定条形的高度,第二个向量用来设定每个条形对应的标签(可选)。如果向量中的元素已被命名,则系统会自动使用元素的名字作为条形标签:
# 首先来看一下BOD数据
BOD
#> Time demand
#> 1 1 8.3
#> 2 2 10.3
#> 3 3 19.0
#> 4 4 16.0
#> 5 5 15.6
#> 6 7 19.8
barplot(BOD$demand, names.arg = BOD$Time)
有时候,“条形图”表示的是分组数据中各个元素的频数(见图2-5右图)。这种条形图跟直方图有些类似,不过,其用离散取值的x轴替代了直方图中连续取值的x轴。要计算向量中各个元素的频数,可以使用table()
函数:
# 值为4的频数为11,值为6的频数为7,而值为8的频数为14
table(mtcars$cyl)
然后将该函数生成的频数表传给barplot()
产生频数图:
# 生成频数图
barplot(table(mtcars$cyl))
图2-5:使用基础绘图系统绘制的条形图(左图);向量元素的频数条形图(右图)
如果使用ggplot2,可以使用geom_col()
绘制相似的图(见图2-6)。我们可以使用geom_col()
画出变量的条形图。注意x
为连续变量和离散变量时的区别:
library(ggplot2)
# 变量值的频数表。这里使用的是BOD数据框,时间(time)列对应x值,需求(demand)列对应y值
ggplot(BOD, aes(x = Time, y = demand)) +
geom_col()
# 将x转化为因子型变量,从而使系统将其视作离散值
ggplot(BOD, aes(x = factor(Time), y = demand)) +
geom_col()
图2-6:使用geom_col()
绘制的连续变量x
的变量值条形图(左图);将x
变量转化为因子型变量后的结果(注意,横坐标上没有6这个类别)(右图)
ggplot2也可以用来绘制分组变量的频数条形图(见图2-7),只需要使用geom_bar()
函数代替geom_col()
。再提醒一次,注意连续x轴和离散x轴的差异。对于某些类型的数据,使用factor()
函数将连续型x
变量转化为离散变量可能更有效:
# 频数条形图。这里使用的是mtcars数据框,cyl列对应x,而y值则通过统计cyl各取值对应行的数量来计算
ggplot(mtcars, aes(x = cyl)) +
geom_bar()
# 频数条形图
ggplot(mtcars, aes(x = factor(cyl))) +
geom_bar()
图2-7:使用geom_bar()
绘制的连续变量x的频数条形图(左图);将x变量转化为因子型变量后的结果(右图)
在旧版ggplot2包中,建议使用geom_bar(stat ="identity")
来创建变量值的条形图。而在ggplot2 2.2.0中,可以使用函数geom_col()
来实现同样的效果。
另见
关于绘制条形图的更多详细内容,参见第3章。