信息图表高仿——R语言仿一财经典线条比较图
今天是一个图表高仿,对象是一财经典的半圆型线条比较图,信息主要是针对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+小伙伴加入了!
感兴趣的可点击阅读原文报名参加哦,满满的干货!