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語言與非結構化數據共舞

TAG:R编程语言 | 数据可视化 | 图片 |