查看原文
其他

信息图表高仿——R语言仿一财经典线条比较图

2017-09-15 杜雨 R语言中文社区

杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang) ,“数据小魔方”创始人。


今天是一个图表高仿,对象是一财经典的半圆型线条比较图,信息主要是针对2016年天猫全球购物狂欢节的当日总销售额,为了使得比较效果更有针对性,作者使用了几个中小型体量的国家GDP总量来对比,总体来看比较生动形象,引人眼球。


但是该图制作比较复杂,之前看到过大神们用Excel来构造半圆的路径数据进行仿制,这里小编使用R来构造曲线数据,大体思路差不多,都是构造曲线的路径数据,链接各点形成整体上的半圆线条,但是R在处理这些数据过程中,具有先天优势,效率相对较高。


library("xlsx")

library("ggplot2")

library(stringr)

library(showtext)

library(Cairo)


setwd("F:/微信公众号/公众号——数据小魔方/2017年3月/20170331")

mydata<-read.xlsx("barpoint.xlsx",sheetName="Sheet1",header=T,encoding='UTF-8',stringsAsFactors=FALSE)

m<-max(nchar(mydata$Name))

mydata$Name<-str_pad(mydata$Name,44,side="right",pad=" ")


生成10个半圆线条的路径点(水平轴X上的点,使用seq可以生成任意区间的等间隔点)数据并按顺序合并。


sdd<-c()

for(m in 1:nrow(mydata)){

x<-seq(from=0,to=mydata$Scale[m],length=1000)

sdd<-c(sdd,x)

}


生成对应的ID、半径和对应半圆的垂直轴的Y坐标点。


这是圆形曲线的方程式,高中学过的哦表忘了(我昨晚是问了我的室友才才确定是这么写的~_~)

曲线方程式:

x^2+Y^2=R^2

Y=sqrt((R/2)^2-(X-R/2)^2)

id<-rep(LETTERS[1:10],rep(1000,10))

rdd<-rep(mydata$Scale,rep(1000,10))

y<-sqrt((rdd/2)^2-(sdd-rdd/2)^2)


mynewdata<-data.frame(id,sdd,y)


这里为了更加方便的,使用自动输出方式:


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

CairoPNG(file="C:/Users/Administrator/Desktop/barpoint.png",width=1000,height=1050)

showtext.begin()

ggplot()+

geom_path(data=mynewdata[mynewdata$id!="F",],aes(x=sdd,y=y,group=id),color="white")+

geom_path(data=mynewdata[mynewdata$id=="F",],aes(x=sdd,y=y,group=id),color="#D56A55")+

geom_segment(data=NULL,aes(x=0,y=0,xend=1690,yend=0),color="white",size=1)+

geom_point(data=mydata,aes(x=Scale,y=0),color="White",size=3)+

geom_text(data=NULL,aes(x=mydata$Scale[c(-4,-6,-8)],y=-30,label=mydata$Scale[c(-4,-6,-8)]),size=4,col="white",family="myfont")+

geom_text(data=NULL,aes(x=mydata$Scale[c(4,6,8)],y=-60,label=mydata$Scale[c(4,6,8)]),size=4,col="white",family="myfont")+

ylim(-70,900)+

scale_x_continuous(breaks=mydata$Scale,labels=mydata$Name)+

labs(title="1207亿元意味着什么?",subtitle="意味着什么,什么,什么,什么???",caption="注:图中数据已根据中国银行2016年11月10日发布的中间汇率美元兑换人民币汇率\n为1:6.7885进行换算",x="",y="")+

theme(

panel.background=element_rect(fill="black"),

plot.background=element_rect(fill="black"),

axis.text.x=element_text(angle=-90,colour="white",hjust=0,size=12),

axis.text.y=element_blank(),

panel.grid=element_blank(),

axis.ticks=element_blank(),

plot.margin=unit(c(1,.5,1.6,.5),"lines"),

panel.spacing=unit(c(0,0,0,0),"lines"),

text=element_text(family="myfont"),

plot.title=element_text(size=50,colour="white",lineheight=1.2),

plot.subtitle=element_text(size=35,colour="white",lineheight=1.2),

plot.caption=element_text(size=25,hjust=0,colour="white"),

panel.border=element_blank()

)

showtext.end()

dev.off()





R语言(ggplot2入门)可视化在商务场景中的应用,已经有200+小伙伴加入了!

感兴趣的可点击阅读原文报名参加哦,满满的干货!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存