绘制条形图

条形图通常用来展示不同的分类下某个数值变量的取值。

绘制条形图需要特别注意一个重要细节:有时条形图的条形高度表示的是数据集中变量的频数,有时则表示变量取值本身。牢记这个区别,因为它太容易让人混淆啦,两者与数据集的对应关系不同,但又对应同样的术语。

绘制简单条形图

使用ggplot()函数和geom_bar(stat="identity")绘制条形图(y轴对应的是变量取值本身)。

library(gcookbook) # 导入数据
library(ggplot2) # 导入画图包
ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity")

plot of chunk unnamed-chunk-1

x是连续变量时,ggplot不是只在实际取值处绘制条形,而将在x轴上介于最大值和最小值之间的所有可能的取值处绘制条形。如果碰到这种情况,我们需要先将其转换为因子变量。

默认情况条形图的填充色为黑灰色且条形图没有边框线,我们可以使用fillcolour参数来设置改变它们。

ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity", fill="lightblue", colour="black")

plot of chunk unnamed-chunk-2

注意这里参数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

分布将DateCultivar映射给xfill

library(ggplot2)
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
    geom_bar(position="dodge", stat="identity")

plot of chunk unnamed-chunk-4

有时候我们想额外添加一个分类变量跟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")

plot of chunk unnamed-chunk-5

我们通过将geom_bar()中的参数指定为color="black"为条形图添加黑色边框线;用scale_fill_brewer()scale_fill_manual()函数对图形的颜色进行设置。上图我们使用了RColorBrewer包中的Pastel1调色板对图形进行调色。

绘制频数条形图

将数据集中的每行数据对应于一个样本,针对样本的频数绘制条形图。

ggplot(diamonds, aes(x=cut)) + geom_bar()

plot of chunk unnamed-chunk-6

# 等价于使用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
人该是自己生活的主宰,而不是别人手里的行货