写在前面。
条形图一般用来展示不同分类下(x轴)某个数值型变量的取值(y轴)。注意,条形的高度,有时是变量的频数
,有时是变量的取值本身
,需要注意区分。
条形图
我没有按照书中的章节顺序,而是根据条形高度映射数据类型
、图形位置
和图形元素
进行了分类整合,使脉络更清晰,知识点更集中。
同时随着ggplot2包的更新,书中的一些用法也已经不适用了,因此会做一些更正。
所使用的一些示例数据需要安装加载包gcookbook,同时也需要加载ggplot2。
if(!require(gcookbook) ) install.packages("gcookbook")
library(gcookbook)
library(ggplot2)
另外,ggplot2绘图的常用基本语句需要知道:
ggplot(data = , aes(x= , y = ) ) + geom_xxxx() + ...
1. 条形高度
如上文所说,条形的高度有时映射的是变量的取值本身,有时是变量的频数统计值。
1.2 频数条形图
如果数据中每一行观测对应的就是一个样本
,如何绘制样本频数分布条形图呢?
使用示例数据diamonds
数据集,它记录了钻石的品质数据
:
> str(diamonds)
tibble [53,940 × 10] (S3: tbl_df/tbl/data.frame)
$ carat : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
$ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
$ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
$ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
$ depth : num [1:53940] 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
$ table : num [1:53940] 55 61 65 58 58 57 57 55 61 61 ...
$ price : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...
$ x : num [1:53940] 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
$ y : num [1:53940] 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
$ z : num [1:53940] 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
使用geom_bar()
,同时y
不映射变量,那么geom_bar()
会默认统计x
映射变量的频数
。本例中x
是离散型变量
。
ggplot(data = diamonds, aes(x= cut )) + geom_bar()
[图片上传失败...(image-b99147-1694479057080)]
可以看到,有20000
颗以上的钻石切割得最佳。
如果x
映射的变量是连续型
,我们会得到一张每个x
值对应的频数分布直方图
:
ggplot(data = diamonds, aes(x= carat )) + geom_bar()
[图片上传失败...(image-fa3b48-1694479057080)]
注意,和书中说的不同,现在默认情况下,<font color=red>geom_bar()和geom_histogram()绘制连续型变量的图形还是不同的。</font>
ggplot(data = diamonds, aes(x= carat )) + geom_histogram()
[图片上传失败...(image-685200-1694479057080)]
不过,上述geom_histogram()
和下面的语句是等价的:
ggplot(data = diamonds, aes(x= carat )) + stat_bin()
以上,条形的高度
和x
轴映射变量的关系就讲这么多。