杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang) ,“数据小魔方”创始人。
今天又是一个超级有趣的经济学人图表,名字真不好叫,先把代码撸完,你们爱叫啥叫啥吧~
首先大致分析一下该图表,全是矩形块 ,而且错位排列,柱形图,NO,条形图,NO,因为横纵位置都是错开的。
好像骂一句MMP,这图Economics到底是用撒做的,太无聊了。
不过呢,如果是用ggplot2的话,这图确实难不倒我,思路如下。
用geom_rect图层,还记得之前做过的那个方块面积图嘛,思路如出一辙,我们仅需获取所有矩形块四个角所在位置的点坐标即可。
#构造原始数据
mydata30,8,6,7,14,11,22,3),
SouthKorea=c(15,6,3,5,16,14,19,22)
)
根据以上数据标签构造作图数据。
#China组的矩形数据:
start_xmin15,by=10,length=8)
end_xmax45,by=10,length=8)
start_ymin0,mydata[1:7,"China"]))
end_ymax"China"])
以上构造了左侧那组矩形的所有边角坐标点,接下来计算矩形中心 坐标点:
mynewdata15mynewdata$label_y2
构造右侧矩形系列边角坐标点:
start_xmin115,by=10,length=8)
end_xmax145,by=10,length=8)
start_ymin0,mydata[1:7,"SouthKorea"]))
end_ymax"SouthKorea"])
#计算中心点位置
data115data1$label_y2
合并左右侧数据
mynewdata
构造类别标签(图例填色需要)
label=rep(c("Food,beverages & tobacco","Clothing & footwear","Household & services","Health","Transport & communications","Leisure & education","Housing & household fuels","Others"),2)
mynewdata$label1:8],ordered=T)
图形可视化过程
library("ggplot2")
library("grid")
library("showtext")
library("Cairo")
font.add("myfont","msyh.ttc")
setwd("E:/数据可视化/R/R语言学习笔记/数据可视化/ggplot2/优秀R语言案例")
草图预览:
ggplot(mynewdata)+
geom_rect(aes(xmin=start_xmin, xmax =end_xmax, ymin =start_ymin, ymax =end_ymax,fill=label))
采集色板:
palette"#007990","#68C1C7","#EBEBDF","#6DA091","#AAC4B9","#761618","#249BB3","#848587")
最终图形
CairoPNG(file="matirx_scatter.png",width=1200,height=600)
showtext.begin()
ggplot(mynewdata)+
geom_rect(aes(xmin=start_xmin, xmax =end_xmax, ymin =start_ymin, ymax =end_ymax,fill=label))+
geom_text(aes(x=label_x,y=label_y,label=paste0(value,"%")),family="myfont",size=6)+
scale_y_continuous(limits=c(0,110),breaks=seq(0,100,10),label=seq(0,100,10))+
scale_fill_manual(values=palette)+
guides(fill=guide_legend(title=NULL,nrow=2)) +
labs(title="Composition of nominal consumption per head in China and South Korea,2015",
subtitle="(% of total)",
caption="Sources:National Bureau of Stistics; The Economist Intelligence Unit.")+
theme_void(base_family="myfont",base_size=20) %+replace%
theme(
plot.title=element_text(size=25,hjust=0,lineheight=1.2),
legend.position=c(0.60,.95),
plot.caption=element_text(hjust=0),
axis.ticks.y=element_line(),
axis.ticks.length=unit(0.5,'cm'),
plot.margin=margin(1,1,1,1,unit="cm"),
axis.text=element_text(),
axis.text.x=element_blank(),
)
showtext.end()
dev.off()
哈哈是不是很神奇呀,想不想学这么棒的技能,那就从ggplot2基础开始学起吧,冰冻三尺,非一日之寒,相信假以时日,你也可做的这么棒!
R语言(ggplot2入门)可视化在商务场景中的应用,已经有200+小伙伴加入了!
感兴趣的可点击阅读原文报名参加哦,满满的干货!