信息图表高仿——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()

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2017-03-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序生活

贪心算法总结贪心算法基本思路算法实现实例分析参考

贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。...

2K4
来自专栏desperate633

LeetCode 122. Best Time to Buy and Sell Stock IISOLUTION

很简单,既然可以进行任意次的交易,那么我们就将所有前一天比后一天价格低的都进行交易,因为只有这样,才会增加收益,所以我们进行一次遍历之后,就可以求出的最大收益值...

831
来自专栏owent

09年8月14日 ECUST ACM 练习赛总结

今天在湖南的OJ上做题,发现不到两小时,他服务器就挂了,但是发现他和POJ上的一些题一样而且是连号的,就到POJ上继续了,我们队出了6题。

791
来自专栏liuchengxu

STARKs, Part II: Thank Goodness It's FRI-day

在本系列的上一篇文章中,我们谈到了,如何能够做出一些非常有意思且简洁的计算证明,比如通过利用多项式复合和除法技术,证明你算出了第一百万个斐波那契数。但是,它依托...

841
来自专栏java达人

分治法

一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的...

1938
来自专栏计算机视觉与深度学习基础

POJ1656

比较水的题,数据量暴力可破,但是你以为这样就结束了吗? 如果数据量大一点呢?不得不说,平时做题还是应该深入一点。 我是在写二维线段树找手感的时候做到这题的,顺势...

3068
来自专栏C语言及其他语言

【每日一题】问题 1250: 素数回文

题目描述 赛马是一古老的游戏,早在公元前四世纪的中国,处在诸侯割据的状态,历史上称为“战国时期”。在魏国作官的孙膑,因为受到同僚庞涓的迫害,被齐国使臣救出后,...

3497
来自专栏人工智能LeadAI

你听过算法也是可以贪心的吗?

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法...

3977
来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

O(1)效率的表面模糊算法优化。

     很久没有写文章了,主要是最近一段时间没有以前那么多空暇空间,内存和CPU占用率一致都很高,应前几日群里网友的要求,今天发个表面模糊的小程序来找回之前...

2466
来自专栏北京马哥教育

给Python小白看的10个使用案例,入门Python就在这里了

今天给大家分享十个Python入门级别的小案例。 这十个案例的难度不高,但是对于知识的使用非常全面,很适合小白在学习的初期建立学习信心和增加熟练度。 每个案例...

4178

扫码关注云+社区

领取腾讯云代金券