专栏名称: EasyCharts
EasyCharts,易图表,我们将定期推送各种数据可视化与分析教程,包括Excel(Power BI)、Origin、Sigmaplot、GraphPad、R、Python、Matlab、Tableau、D3.js等。
目录
相关文章推荐
龙视新闻联播  ·  龙江最美飘雪时|早春升温日 赏冰乐雪时 ·  昨天  
宝山消防支队  ·  以案为例 |《油锅起火怎么办?》 ·  昨天  
IT服务圈儿  ·  45K*16薪,进字节了! ·  2 天前  
前端早读课  ·  【第3459期】两款 AI 编程助手 ... ·  2 天前  
51好读  ›  专栏  ›  EasyCharts

重要的是图表思维,而不是工具

EasyCharts  · 公众号  · 前端  · 2017-07-19 10:12

正文

很久没有作图了,主要是一时找不到应该练手的案例。


然后昨天逛网易数独栏目的数据新闻,看到一幅还不错的案例,对于我来说值得一试,然后就手痒给照葫芦画瓢弄出来了。(主要是其中涉及到的细节处理很麻烦)


当然过程是花了些时间的,主要是需要慢慢打磨其中的细节,需要利用很多技术来处理图形版面的交接位置。


令我感触最深的是,想要用ggplot2随心所欲的画图,ggplot2掌握的再熟练,也只是勉强过的了技术关,而图表背后的思维和结构更考验人,更具有挑战性。


好在我学习R语言之前,就已经利用Excel临摹了大量的高难度信息图,这一点可视化素养的积累,再结合对ggplot2勤加练习获得的图感,分分钟做出一副自己喜欢的作品,已经不在话下了。





以下是该案例涉及到的扩展包:


library("plyr")

library("tidyr")

library("ggthemes")

library("sca")

library("dplyr")

library("showtext")

library("Cairo")

library("grid")

font.add("myfont","msyh.ttc")

font.add("myfzhzh","方正正粗黑简体.TTF")


我把该案例切割成了两部分来做:

(实际上如果放在一个图里做也是可以实现的,无非是多写一些代码罢了,但是涉及到颜色标度重复的问题,一时半会儿找不到解决方案,为了更加逼真的还原案例效果,我决定分开来做)。


  • 原图中的下半部分(条形图)(以下简称模块1)

  • 上半部分(堆积柱形图+连接带)(以下简称模块2)


导入数据源:


tea_data

tea_data$State[12]



tea_bump是上半部分(模块2)中堆积柱形图的数据源,我没有使用传统的堆积柱形图去做,而是使用了矩形几何对象,所以数据源中需要指定X轴起始点,Y轴起始点。


tea_bump

tea_bump

other_Ratio

other_Yield

data1

tea_bump


tea_bump$end

tea_bump$start

tea_bump$id

tea_bump

tea_bump



以下是下半部分柱形图的数据源,同样我也没有使用普通的柱形图几何对象去做,而是使用了范围线图(geom_linerange),这样可以节省调整步骤,但须额外设置线的起始点。


tea_bar

tea_bar$id


colorpal

library("ggplot2")

library("showtext")

library("Cairo")


底部柱形图对象:

(因为需要拼图,所以图形对象要临时存储)


p1

geom_hline(aes(yintercept=1:7*400),colour="grey",linetype=2)+

geom_linerange(data=tea_bar,aes(x=id,ymin=max(tea_bar$Consum)-Consum,ymax=max(tea_bar$Consum),colour=Consum),size=24)+

geom_point(data=tea_bar,aes(x=id,y=max(tea_bar$Consum)+165,fill=colorpal),shape=22,colour="white",size=37.5)+

geom_text(data=tea_bar,aes(x=id,y=max(tea_bar$Consum)+165,label=State),size=6,family="myfont",vjust=.5)+

geom_text(data=tea_bar,aes(x=id,y=max(tea_bar$Consum)-Consum+80,label=Consum),size=6,family="myfont",vjust=0.5,colour="white")+

annotate("text",x =5,y=80,label="各国每年人均茶叶消费量(克)",family="myfzhzh",size=11,colour="#515551")+

ylim(0,4800)+

geom_linerange()+

guides(fill=FALSE,colour=FALSE)+

scale_colour_gradient(low="#A1C997",high="#47734A")+

scale_fill_manual(values=c("#B4BFB4","#E5E5E5"))+

theme_map(base_family="myfont") %+replace%

theme(

plot.margin=unit(c(0,1.5,0,1.5), "cm"),

)



以下数据是构造模块2辅助数据:


(上半部分堆积柱形图的下侧连接带数据)的辅助数据,我打算使用多边形几何对象了来模拟那些参差交错的连接带。这就意味着我要找到每一条带子,即四边形的四个拐点坐标,并按顺序排列。)


如果你看的不是很懂,实属正常,这种笨拙的想法,我也不知道是从哪里学来的。


tea_chord

tea_chord$id

tea_chord$mean

tea_chord$xend

tea_chord$xstart



tea_chord_data

tea_chord_data

tea_chord_data


tea_chord_newdata

names(tea_chord_newdata)

rownames(tea_chord_newdata)

tea_chord_newdata$order



tea_chord_newdata_final

tea_chord_newdata_final$lat

tea_chord_newdata_final$lat[tea_chord_newdata_final$order==3|tea_chord_newdata_final$order==4]

tea_chord_newdata_final$long



所以说上半部分的堆积柱形图(附加连接带)其实是用了两份不同的数据源模拟出来的。







请到「今天看啥」查看全文