R語言可視化——圖表美化與套用主題(上)
ggplot函數所製作的圖表默認設計風格雖然經過設計師的精雕細琢,但是並不是盡如人意。
畢竟在這個大眾審美水平水平越來越高的時代里,企業中的各式報告也強調與企業的VI相互統一,形成自身風格與特點。
這樣就要求R語言所製作的圖表能夠根據所需的風格與主題,高度可定製。當然ggplot函數中是支持這種多樣性的訂製需求的,甚至像那些知名的諮詢或者頂級財經媒體的御用圖表模板已經被製作成了圖表主題分享在R語言的主題包之中。
接下來要介紹關於圖表主題設置的一些細節:
關於柱形圖與條形圖的轉化問題:
這個問題昨天已經提到了,R語言是不區分柱形圖、條形圖的,兩者都叫Barplot,只是開口方向不同。(原因前文已經說明)
柱形圖與條形圖之間的轉換秩序一句代碼即可:
coord_flip() #柱形圖與條形圖之間翻轉nggplot(mpg,aes(class,displ))+geom_bar(stat="identity",fill="steelblue")nggplot(mpg,aes(class,displ))+geom_bar(stat="identity",fill="steelblue")+coord_flip()n
柱形圖/條形圖按照指標順序排序:
默認情況下柱形圖指標順序非常混亂,我們可以通過參數設置讓柱形圖按照指標由高到低或者由低到高排序。
我們從ggplot默認自帶數據集mtcars中取前8條記錄作圖:
data<-mtcars[0:8,]nggplot(data, aes(row.names(data), qsec))+ geom_bar(stat = "identity", fill = "steelblue")nggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ geom_bar(stat = "identity", fill = "steelblue")n
添加排序參數之後,圖表看上去舒服很多,但是X軸橫坐標英文名字太長,我們採用條形圖規避,或者將X軸標籤文字旋轉90度。
ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ geom_bar(stat = "identity", fill = "steelblue")+coord_flip()nggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ geom_bar(stat = "identity", fill = "steelblue")+theme(axis.text.x=element_text(angle = 90, colour = "black"))n
由於添加排序參數,導致默認X軸標題被更改,這裡我們要從新定義X軸、Y軸標題
ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ ngeom_bar(stat = "identity", fill = "steelblue")+ntheme(axis.text.x=element_text(angle = 90, colour = "black"))+nlabs(x = "Cars", y = "Q seconds")n
定義X軸、Y軸標籤文本的大小、顏色、字體
ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ n geom_bar(stat = "identity", fill = "steelblue")+n theme(axis.text.x=element_text(angle = 90,size = 10, colour = "black"),axis.text.y=element_text(size = 10, colour = "black"))+labs(x = "Cars", y = "Q seconds")+theme(text=element_text(family = "arial", size = 20))n
添加標題:
ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ n geom_bar(stat = "identity", fill = "steelblue")+n theme(axis.text.x=element_text(angle = 90,size = 10, colour = "black"),axis.text.y=element_text(size = 10, colour = "black"))+labs(x = "Cars", y = "Q seconds")+theme(text=element_text(family = "arial", size = 20))+ggtitle("An Indrouction of BarPlot ")n
還有柱形圖的背景帶著網格線和灰色底色,如果想要修改也需要單獨調整參數。
ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ n geom_bar(stat = "identity", fill = "steelblue")+n theme(axis.text.x=element_text(angle = 90,size = 14, colour = "black"),axis.text.y=element_text(size = 14, colour = "black"))+labs(x = "Cars", y = "Q seconds")+theme(text=element_text(family = "arial", size = 20))+ggtitle("An Indrouction of BarPlot ")+n theme(panel.grid = element_blank())+theme(panel.background = element_blank())n
調整柱形圖的數據條寬度:
ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ n geom_bar(stat = "identity", fill = "steelblue",width_=0.5)+n theme(axis.text.x=element_text(angle = 90,size = 14, colour = "black"),axis.text.y=element_text(size = 14, colour = "black"))+labs(x = "Cars", y = "Q seconds")+theme(text=element_text(family = "arial", size = 20))+ggtitle("An Indrouction of BarPlot ")+theme(panel.grid = element_blank())+theme(panel.background = element_blank())n
為圖表添加數據標籤:
ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ ngeom_bar(stat = "identity", fill = "steelblue",width_=0.5)+ntheme(axis.text.x=element_text(angle = 90,size = 14, colour = "black"),axis.text.y=element_text(size = 14, colour = "black"))+nlabs(x = "Cars", y = "Q seconds")+ntheme(text=element_text(family = "arial", size = 20))+nggtitle("An Indrouction of BarPlot ")+ntheme(panel.grid = element_blank())+ntheme(panel.background = element_blank())+ngeom_text(aes(label = qsec, vjust = -0.8, hjust = 0.5)n
大家可以看到,以上調整過程全部需要通過ggplot函數附加參數完成,機會每一個圖表元素都有對應的調整參數,調整起來其實蠻辛苦的,不過對於同一類參數可以放在同一參數系統中去,也就是簡化代碼:
ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+n geom_bar(stat = "identity", fill = "steelblue",width_=0.5)+n labs(x = "Cars", y = "Q seconds")+n ggtitle("An Indrouction of BarPlot ")+n geom_text(aes(label = qsec, vjust = -0.8, hjust = 0.5))+n theme(n axis.text.x=element_text(angle = 90,size = 14, colour = "black"),n axis.text.y=element_text(size = 14, colour = "black"),n text=element_text(family = "arial", size = 20),n panel.grid = element_blank(),n panel.background = element_blank()n )n
經過簡化後的代碼還是如上所示的那麼長,而且我還是以最為簡單的單序列柱形圖為例所介紹的呢,而且還沒有考慮到對坐標軸刻度線長度、刻度範圍的調整,如果是多序列條形圖甚至是分面的多序列條形圖的調整元素就更多了,以上的代碼還能繼續寫出幾十行呢(哈哈誇張了,不過真的很長呢-_-)
ggplot(data, aes(reorder(row.names(data), -qsec), qsec))+ #x軸排序n geom_bar(stat = "identity", fill = "SandyBrown",width_=0.8)+ #填色、柱形寬度n labs(x = "Cars", y = "Q seconds")+ #X、Y軸標題n ggtitle("An Indrouction of BarPlot ")+ #圖表標題n geom_text(aes(label = qsec, vjust = -0.5, hjust = 0.5))+ #添加數據標籤n theme(n axis.text.x=element_text(angle = 90,size = 12, colour = "DarkGrey"), n #X軸標籤文本旋轉、大小、顏色n axis.text.y=element_text(size = 12, colour = "DarkGrey"), n #Y軸標籤文本大小、顏色n axis.ticks.length=unit(0.5,cm),n #坐標軸刻度線長度n text=element_text(family = "arial", size = 20,colour = "DimGrey"),n #圖表內文本字體n panel.grid = element_blank(),n panel.background = element_blank()n ) #清空圖層背景、網格線n
所以呢,如果想要找到一種即不需要寫很長很冗雜的代碼,而且又能將圖表美化的超級漂亮的方法,那真的就完美了呢~
那就要站在巨人的肩膀上嘍,使用那些發燒友所寫的行業標杆級的圖表主題包。(明天再繼續寫吧,寫了辣么多累了~)
聯繫方式:
微信:ljty1991
博客主頁:raindus home
個人公眾號:數據小魔方(datamofang)
團隊公眾號:EasyCharts
qq交流群:[魔方學院]553270834
推薦閱讀:
※[譯]快速上手:在R中使用XGBoost演算法
※《R語言實戰》第二部分第七章複習筆記
※金融小知識——CRS風暴與全球離岸金融中心
※第三關:簡單數據處理和分析