引言
ggplot2包的作圖品質毋庸置疑,但是其作圖文法對新手來說還是有點難度,ggplot2:資料分析與圖形藝術這本書也介紹了ggplot2包的基本哲學思想和操作,個人感覺例子還不夠豐富,所以對該包的用法還是停留在半瓶醋的水平。某天,突然發現一本ggplot2包的例子書,大喜,英文版名字為 R Graphics Cookbook,中文版叫做 R資料視覺效果手冊,鑒於高昂的價格,我決定硬著頭皮翻下英文版,順便做點筆記,供自己或者各位朋友參考,英文水平不高,如有錯誤,莫怪。 基本操作
首先,我想介紹的是用ggplot2畫長條圖,基本用法如下:
install.packages('gcookbook')#R資料視覺效果手冊書中的資料集library(ggplot2)library(gcookbook) ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity")
ggplot()函數產生圖層,aes()指定x和y軸變數,x一般為名義變數;geom_bar產生長條圖圖層。
如果x為連續變數或者數值變數,長條圖會有點不同。如果是連續變數,長條圖的橫座標會取連續變數最大值與最小值之間每一個數值;如果是數值變數,你得把數值變數轉化成因子,例子見代碼。
BOD#BBD資料集 Time變數不包含6這個數值Time demand1 8.32 10.33 19.04 16.05 15.67 19.8ggplot(BOD, aes(x=Time, y=demand)) + geom_bar(stat="identity")#直接賦值,不做因子轉化ggplot(BOD, aes(x=factor(Time), y=demand)) + geom_bar(stat="identity")#變數進行因子轉化
直接把連續變數賦值給x和數值轉為因子後給x的差異從圖中就能很清楚的看出來。 調整顏色
長條圖預設為黑灰色填充,我們可以對填充顏色和長條圖邊框顏色進行修改。
ggplot(pg_mean, aes(x=group, y=weight)) +geom_bar(stat="identity", fill="lightblue", colour="black")
分組長條圖
有時候我們想對同一資料中的兩類不同對象進行比較,我們可以使用分組長條圖。我們使用cabbage_exp資料集,該資料集包含兩類不同資料
cabbage_exp#資料集Cultivar Date Weightc39 d16 3.18c39 d20 2.80c39 d21 2.74c52 d16 2.26c52 d20 3.11c52 d21 1.47ggplot(cabbage_exp,aes(x=Date, y=Weight, fill=Cultivar))+geom_bar(stat='identity',position="dodge")#identity意味著把y當做值去輸入,如果改成bin,就會計算y出現的頻數。dodge意味是各組是左右分布而不是上下重疊ggplot(cabbage_exp,aes(x=Date, y=Weight, fill=Cultivar))+geom_bar(stat='identity')
製作頻數長條圖
頻數長條圖不需要指定變數y,而是根據變數x出現的頻數自動產生。
ggplot(diamonds, aes(x=cut)) + geom_bar(stat="bin")#stat="bin"可有可無,該參數是預設的
給正值和負值長條圖賦予不同顏色
csub <- subset(climate, Source=="Berkeley" & Year >= 1900)csub$pos <- csub$Anomaly10y >= 0 #pos變數是個布爾變數,值為T or Fggplot(csub, aes(x=Year, y=Anomaly10y, fill=pos)) +geom_bar(stat="identity", position="identity")#position="identity"是為了關閉負值長條圖沒有定義的警告
調整長條圖柱子大小及寬度
長條圖寬度調整用width函數,預設值為0.9。我們可以通過修改該值,使柱子變得更寬or更窄。
ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity", width=0.5)#窄柱子ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity", width=0.5)#寬柱子
還有在分組長條圖中,各組柱子之間是沒有空隙的,如果要改變柱子之間距離,我們需要設定position=po
sition_dodge()。
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +geom_bar(stat="identity", width=0.5, position=position_dodge(0.6))#值越大越離得遠
圖中增加資料
可以用geom_text()給長條圖中增加圖注或資料,通過設定vjust可以使資料顯示在柱子上或立面。
ggplot(cabbage_exp,aes(x=interaction(Date, Cultivar),y=Weight))+geom_bar(stat="identity")+geom_text(aes(label=Weight), vjust=-0.2)#顯示在上面ggplot(cabbage_exp,aes(x=interaction(Date,Cultivar),y=Weight))+geom_bar(stat="identity") +geom_text(aes(label=Weight),vjust=1.5,colour="white")#顯示在裡面
暫時先介紹些基礎,需要更多進階主題或例子,可以參考R資料視覺效果手冊,或者多用help().