寫在前面。
條形圖一般用來展示不同分類下(x軸)某個數(shù)值型變量的取值(y軸)。注意,條形的高度,有時是變量的頻數(shù)
,有時是變量的取值本身
,需要注意區(qū)分。
條形圖
我沒有按照書中的章節(jié)順序,而是根據(jù)條形高度映射數(shù)據(jù)類型
、圖形位置
和圖形元素
進行了分類整合,使脈絡更清晰,知識點更集中。
同時隨著ggplot2包的更新,書中的一些用法也已經(jīng)不適用了,因此會做一些更正。
所使用的一些示例數(shù)據(jù)需要安裝加載包gcookbook,同時也需要加載ggplot2。
if(!require(gcookbook) ) install.packages("gcookbook")
library(gcookbook)
library(ggplot2)
另外,ggplot2繪圖的常用基本語句需要知道:
ggplot(data = , aes(x= , y = ) ) + geom_xxxx() + ...
1. 條形高度
如上文所說,條形的高度有時映射的是變量的取值本身,有時是變量的頻數(shù)統(tǒng)計值。
1.2 頻數(shù)條形圖
如果數(shù)據(jù)中每一行觀測對應的就是一個樣本
,如何繪制樣本頻數(shù)分布條形圖呢?
使用示例數(shù)據(jù)diamonds
數(shù)據(jù)集,它記錄了鉆石的品質(zhì)數(shù)據(jù)
:
> 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()
會默認統(tǒng)計x
映射變量的頻數(shù)
。本例中x
是離散型變量
。
ggplot(data = diamonds, aes(x= cut )) + geom_bar()
[圖片上傳失敗...(image-b99147-1694479057080)]
可以看到,有20000
顆以上的鉆石切割得最佳。
如果x
映射的變量是連續(xù)型
,我們會得到一張每個x
值對應的頻數(shù)分布直方圖
:
ggplot(data = diamonds, aes(x= carat )) + geom_bar()
[圖片上傳失敗...(image-fa3b48-1694479057080)]
注意,和書中說的不同,現(xiàn)在默認情況下,<font color=red>geom_bar()和geom_histogram()繪制連續(xù)型變量的圖形還是不同的。</font>
ggplot(data = diamonds, aes(x= carat )) + geom_histogram()
[圖片上傳失敗...(image-685200-1694479057080)]
不過,上述geom_histogram()
和下面的語句是等價的:
ggplot(data = diamonds, aes(x= carat )) + stat_bin()
以上,條形的高度
和x
軸映射變量的關系就講這么多。