寫(xiě)在前面。
條形圖一般用來(lái)展示不同分類下(x軸)某個(gè)數(shù)值型變量的取值(y軸)。注意,條形的高度,有時(shí)是變量的頻數(shù)
,有時(shí)是變量的取值本身
,需要注意區(qū)分。
條形圖
我沒(méi)有按照書(shū)中的章節(jié)順序,而是根據(jù)條形高度映射數(shù)據(jù)類型
、圖形位置
和圖形元素
進(jìn)行了分類整合,使脈絡(luò)更清晰,知識(shí)點(diǎn)更集中。
同時(shí)隨著ggplot2包的更新,書(shū)中的一些用法也已經(jīng)不適用了,因此會(huì)做一些更正。
所使用的一些示例數(shù)據(jù)需要安裝加載包gcookbook,同時(shí)也需要加載ggplot2。
if(!require(gcookbook) ) install.packages("gcookbook")
library(gcookbook)
library(ggplot2)
另外,ggplot2繪圖的常用基本語(yǔ)句需要知道:
ggplot(data = , aes(x= , y = ) ) + geom_xxxx() + ...
2. 圖形位置
在ggplot
語(yǔ)句中,通過(guò)映射一個(gè)分類變量給aes
語(yǔ)句的fill
參數(shù),根據(jù)不同的變量值給條形分配不同的填充顏色
,然后設(shè)定不同的位置排列
,分為簇狀(并排排列)
和堆積
兩種。
2.1 簇狀條形圖
使用示例數(shù)據(jù)cabbage_exp
數(shù)據(jù)集:
> 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
將Cultivar
映射給fill
參數(shù),并設(shè)置position= "dodge"(水平方向錯(cuò)開(kāi))
。
映射給y
的是確定的值,因此stat="identity"
。
ggplot(data = cabbage_exp, aes(x= Date ,y = Weight, fill = Cultivar )) +
geom_bar(position = "dodge", stat = "identity")
[圖片上傳失敗...(image-7b5dc3-1694565251399)]
注意,映射給fill
的變量也是離散型變量
。
可以通過(guò)scale_fill_brewer()
或者scale_fill_manual()
對(duì)填充顏色進(jìn)行設(shè)置:
ggplot(data = cabbage_exp, aes(x= Date ,y = Weight, fill = Cultivar )) +
geom_bar(position = "dodge", stat = "identity") +
scale_fill_manual(values = c('#01008B', '#DC010C'))
[圖片上傳失敗...(image-f112a3-1694565251399)]
注意,如果分類變量有缺失值
,圖形會(huì)被略去不繪制,被臨近色塊擴(kuò)充。
這里我們手動(dòng)刪掉一個(gè)觀測(cè),造成分類變量缺失值。
> cabbage_exp[1:5,]
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
然后再繪制。
ggplot(data = cabbage_exp[1:5,], aes(x= Date ,y = Weight, fill = Cultivar )) +
geom_bar(position = "dodge", stat = "identity") +
scale_fill_manual(values = c('#01008B', '#DC010C'))
[圖片上傳失敗...(image-ac5a82-1694565251399)]