仿經濟學人——矩陣氣泡圖

本篇文章案例來源於經濟學人2013年一幅關於家庭支出結構與國家間的交叉對比圖。

該圖信息量相當豐富,至少涵蓋了四個維度的信息,支出結構信息(類別型欄位)、國別信息(類別型欄位)、支出水平分類(類別型欄位)、支出規模(數值型指標)等。

倘若使用ggplot進行繪製,思路非常簡單,僅通過散點圖層皆可完成,ggplot2的散點圖可以支持離散標度,但是如果想要處理好類別的順序,需要把類別型變數因子化。

因為原圖中有獎金100+數據點,很多都沒有具體數值,一個一個用肉眼估計簡直喪心病狂,所以我模擬了一組數值,只保證思路講到位就OK。

setwd("E:/微信公眾號/公眾號——數據小魔方/2017年9月/20170914/")nmydata<-read.csv("matrix_bubble.csv",stringsAsFactors = FALSE,check.names = FALSE)n

原始數據中帶有n,導入時R語言會自動給添加一個,這裡涉及到R語言中保留字元的問題,需要將多餘的刪掉。

mydata$Class[c(1,6,7)]<-c("Housing,fueln&utilities","Restaurantsn& hotels","Clothingn& footwear")nnames(mydata)[9:11]<-c("SaudinArabia","SouthnKorea","UnitednStates")library("tidyr")nmydata1<-gather(mydata,Country,Spend,-1)nmydata1$Class<-factor(mydata1$Class,levels=c("Education","Alcohol & tobacco","Communications","Furnishings","Clothingn& footwear","Restaurantsn& hotels","Health","Recreation","Transport","Food","Housing,fueln&utilities"),ordered=T)n

分割支出規模的類別區間:

qa<-quantile(mydata1$Spend,c(0,.25,.5,.75,1))nmydata1$Spend_fact<-cut(mydata1$Spend,breaks=qa,labels = c("lowest spend","below average","above average","highest spend"),include.lowest=TRUE,ordered=T)n

製作草圖:

library("ggplot2")library("grid")library("showtext")library("Cairo")nfont.add("myfont","msyh.ttc")nsetwd("E:/《R語言商務圖表與可視化》/9.12——R語言ggplot2可視化在線分享")nCairoPNG(file="matirx_scatter.png",width_=1200,height=900)nshowtext.begin()nggplot(data=mydata1)+nngeom_hline(aes(x=Country,y=Class,yintercept = 1:nrow(mydata1)),size=20,colour="#E4EDF2",alpha=.5)+ngeom_vline(aes(x=Country,y=Class,xintercept = 1:nrow(mydata1)),linetype="dashed")+ngeom_point(aes(x=Country,y=Class,size=Spend,fill=Spend_fact),shape=21,colour="white")+nscale_fill_manual(values=c("#F9DBD3","#F1B255","#519F46","#41B0C3"))+nscale_size_area(max_size=25)+nscale_x_discrete(position = "top")+nguides(size=FALSE,fill=guide_legend(title="Within category",direction="horizontal"))+nlabs(title="How they spend it",subtitle="Househlod spending*,of total,2013 or latest,includes taxes",caption="Source:Eurostat")+ntheme_void(base_size=20,base_family="myfont") %+replace%ntheme(n legend.position="top",n panel.grid.major.x=element_line(linetype="dashed"), #plot.margin=margin(5,5,5,5,unit="pt"),n axis.text=element_text(size=15,hjust=0.5),n plot.title=element_text(size=35,hjust=0,lineheight=1.2),n plot.caption=element_text(hjust=0,lineheight=1.2)n) nshowtext.end()ndev.off()n

最近剛剛上線的新課程,R語言(ggplot2入門)可視化在商務場景中的應用,已經有180+小夥伴兒加入了,感興趣的可以點擊閱讀原文報名參加哦,滿滿的乾貨!

GitHub:

github.com/ljtyduyu/Dat

在線課程:

Hellobi Live | 9月12日 R語言可視化在商務場景中的應用

推薦閱讀:

Excel圖表的基本類型與選擇
你會怎樣衡量你的產品? —— 一點產品數據分析的經驗分享
ECharts+Python 給你的數據做「美顏」
Python--matplotlib 繪圖可視化練手--折線圖/條形圖
Power BI應用場景賞析-銷售篇

TAG:R编程语言 | 数据可视化 | 数据分析 |