第3章 条形图
R数据可视化手册
条形图也许是最常用的数据可视化方法,通常用来展示不同的分类下(在x轴上)某个数值型变量的取值(在y轴上)。例如,条形图可以用来形象地展示四种不同商品的价格情况,但不适宜用来展示商品价格随时间的变动趋势,因为这里时间是一个连续变量——尽管我们也可以这么做,后面会看到这种情形。
绘制条形图时需特别注意一个重要的细节:有时条形图的条形高度表示的是数据集中变量的频数,有时则表示变量取值本身。牢记这个区别——这里极易混淆,因为两者与数据集的对应关系不同,但又对应同样的术语。本章将对此进行深入讨论,并分别介绍这两类条形图的绘图技巧。
3.1 绘制简单条形图
问题
你有一个包含了两列数据的数据框,其中一列数据表示条形在x轴上的位置,另一列表示每个条形在y轴上对应的高度,基于此,如何绘制条形图?
方法
使用ggplot()函数和geom_bar(stat="identity")绘制上述条形图,并分别指定与x轴和y轴对应的变量(见图3-1)。
library(gcookbook) #为了使用数据
ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity")
讨论
当x是连续型(数值型)变量时,条形图的结果与上图会略有不同。此时,ggplot不是只在实际取值处绘制条形,而将在x轴上介于最大值和最小值之间所有可能的取值处绘制条形,如图3-2所示。我们可以使用factor()函数将连续型变量转化为离散型变量。
# 没有Time == 6的输入
BOD
Time demand
1 8.3
2 10.3
3 19.0
4 16.0
5 15.6
7 19.8
# Time是数值型(连续型)变量
str(BOD)
'data.frame': 6 obs. of 2 variables:
$ Time : num 1 2 3 4 5 7
$ demand: num 8.3 10.3 19 16 15.6 19.8
- attr(*, "reference")= chr "A1.4, p. 270"
ggplot(BOD, aes(x=Time, y=demand)) + geom_bar(stat="identity")
# 使用factor()函数将Time转化为离散型(分类)变量
ggplot(BOD, aes(x=factor(Time), y=demand)) + geom_bar(stat="identity")
本例中,数据集中包含两列分别对应于x和y变量。如果你想让条形图的高度与每组变量的频数相对应,可参见3.3节的内容。
默认设置下,条形图的填充色为黑灰色且条形图没有边框线,我们可通过调整fill参数的值来改变条形图的填充色;可通过colour参数为条形图添加边框线。在图3-3中,我们将填充色和边框线分别指定为浅蓝色和黑色。
ggplot(pg_mean, aes(x=group, y=weight)) +
geom_bar(stat="identity", fill="lightblue", colour="black")
在ggplot2中,颜色参数默认使用的是英式拼写colour,而非美式拼写color。然而,ggplot2会在底层将美式拼写重映射为英式拼写,因此输入美式拼写的参数并不影响函数的运行。
另见
如果你想让条形图的高度对应于每组变量的频数,可参见3.3节的内容。
根据另一个变量值重排因子水平顺序的内容可参见15.9节。手动更改因子水平顺序的内容,可参见15.8节。
更多关于图形着色的内容,可参见本书第12章。