R語言可視化——圖表美化與套用主題(下)
昨天的分享跟大家簡單介紹了關於柱形圖圖表元素美化的思路,今天接著分享關於套用主題。
因為單獨使用代碼來調整單個圖表元素,實在是太費勁了,更何況圖表的細節元素有那麼多,每一個都要單獨寫一句代碼,即便簡化後,也是一筆很大的工作量。
所以R社區的開發者就創造出了圖表主題包這種半成品的圖表模板,通過基礎圖表輸出+套用訂製主題來達到高效圖表美化的目標。
這裡為了圖表效果最佳,我不用內置數據集,直接使用代碼生成數據框:
data<-data.frame(conpany=c("Apple","Google","Facebook","Amozon","Tencent"),Revenue=c(5000,3500,2300,2100,3100))n
以上使用函數生成了2015年五個著名互聯網公司的年度營業額數據(數據純屬虛構,無從考證)數據指標。
然後載入我們需要的做圖包:特別是grid和ggthemes包將是我們調整與美化圖表的主要支撐。
library(ggplot2)nlibrary(ggthemes)nlibrary(grid)n
下面我們就可以直接使用ggplot作圖了,大家應該還記得昨天的柱形圖語法吧:
ggplot(data,aes(reorder(conpany,-Revenue),Revenue))+geom_bar(stat="identity")n
ggplot(data,aes(reorder(conpany,-Revenue),Revenue))+ngeom_bar(stat="identity")+nlabs(x="Company",y="The Revenue of 2015($)")+nggtitle("The Financial Performance of five giant")n
坦白的說,這個圖表足夠精準、簡潔、實用,無論是用在論文里還是用在報告中,都沒有太大問題,至少是不算難看。
可是既然有能做的更美,而又不會浪費太多時間的方法,為啥不用呢~
接下來就是ggthemes包的定製主題大展拳腳的時候了~
我們用以上圖表的最初代碼再加上特定主題,效果一下子六上天!
主題:theme_bw()
ggplot(data,aes(reorder(conpany,-Revenue),Revenue))+ngeom_bar(stat="identity")+nlabs(x="Company",y="The Revenue of 2015($)")+nggtitle("The Financial Performance of five giant")+ntheme_bw()n
主題:theme_wsj()
ggplot(data,aes(reorder(conpany,-Revenue),Revenue))+ngeom_bar(stat="identity")+nlabs(x="Company",y="The Revenue of 2015($)")+nggtitle("The Financial Performance of five giant")+ntheme_wsj()n
主題+顏色主題:theme_wsj()+scale_fill_wsj("rgby", "")
ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+ngeom_bar(stat="identity")+nlabs(x="Company",y="The Revenue of 2015($)")+nggtitle("The Financial Performance of five giant")+ntheme_wsj()+nscale_fill_wsj()n
以上圖表套用華爾街日報的主題模板和配色模板,看起來已經很完美了,但是圖表中依然有很多不完美的地方,比如刻度線太短、單序列卻添加了多餘的圖例、字體不太符合我們的審美。
下面一個一個解決:
ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+ngeom_bar(stat="identity")+nlabs(x="Company",y="The Revenue of 2015($)")+nggtitle("The Financial Performance of five giant")+ntheme_wsj()+nscale_fill_wsj()+ngeom_text(aes(label = Revenue, vjust = -0.5, hjust = 0.5))+ntheme(legend.position=none,axis.ticks.length=unit(0.5,cm))n
以上過程在使用華爾街日報主題及配色包的同時,添加了我們需要的數據標籤、刪除了無效圖例、同時加長了刻度線等圖表元素。
其實以上所用到的圖表主題內仍然是可以添加可選參數的:
ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+、geom_bar(stat="identity")+nlabs(x="Company",y="The Revenue of 2015($)")+nggtitle("The Financial Performance of five giant")+ntheme_wsj(color="gray")+nscale_fill_wsj("rgby", "")+ngeom_text(aes(label = Revenue, vjust = -0.5, hjust = 0.5))+ntheme(legend.position=none,axis.ticks.length=unit(0.5,cm))n
當然,如果我們找到了更好的一組配色,我們也可以僅僅使用華爾街日報的主題,而使用我們自己準備好的調色板:
ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+ngeom_bar(stat="identity")+nlabs(x="Company",y="The Revenue of 2015($)")+nggtitle("The Financial Performance of five giant")+ntheme_wsj()+nscale_fill_manual(values=c("#FB882C","#5B88A0"))+ngeom_text(aes(label = Revenue, vjust = -0.5, hjust = 0.5))+ntheme(legend.position=none,axis.ticks.length=unit(0.5,cm))n
當你厭倦了華爾街日報的風格的時候,你也可以試一試經濟學人的風格主題:
ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+ngeom_bar(stat="identity")+nlabs(x="Company",y="The Revenue of 2015($)")+nggtitle("The Financial Performance of five giant")+ntheme_economist(base_size=14)+nscale_fill_economist()+ngeom_text(aes(label = Revenue, vjust = -0.5, hjust = 0.5))+ntheme(legend.position=none,axis.ticks.length=unit(0.5,cm))n
如果你覺得柱形圖的數據條間距太寬,也可以通過在在geom_bar()中利用width_=0.65參數進行自定義修改。
ggplot(data,aes(reorder(conpany,-Revenue),Revenue,fill="steelbule"))+ngeom_bar(stat="identity",width_=0.65)+nlabs(x="Company",y="The Revenue of 2015($)")+nggtitle("The Financial Performance of five giant")+ntheme_economist(base_size=14)+nscale_fill_economist()+ngeom_text(aes(label = Revenue, vjust = -0.5, hjust = 0.5))+ntheme(legend.position=none,axis.ticks.length=unit(0.5,cm))n
聯繫方式:
微信:ljty1991
博客主頁:raindus home
個人公眾號:數據小魔方(datamofang)
團隊公眾號:EasyCharts
qq交流群:[魔方學院]553270834
推薦閱讀:
※國外最全的圖表參考手冊
※Learn R | 時間序列圖表的可視化
※Learn R | 數據重塑之tidyr包
※R語言顏色綜合運用與色彩方案共享
※[原]數據流編程教程:R語言與非結構化數據共舞