用R语言制作商务图表,让你的图表美出新高度~

每日干货好文分享丨请点击+关注

欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区。

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入头条数据爱好者交流群,数据爱好者们都在这儿。

本文案例图表是之前本公众号推送过的一个方块面积比较图,之前看到过刘万祥老师在其公众号及博客中也提供了很好的制作思路。

Excel史上最全的气泡与方块系列的图表

当时就想如果是使用R来写该图表,不止是否可行呢,只是当时一时半会儿没有思路,直到最近,随着对ggplot 系统的理解进一步加深,这才找到了比较合适的思路。

今天跟大家分享使用R语言的ggplot函数来模仿该图表:

以下是原图:

为了 将本文 制作的成品图与该案例原图进行比较,我使用了相同的数据源:

library(ggplot2)

library(ggmap)

#加载ggmap是为了使用其theme_nothing()函数清空其原有主题元素

制作数据源:

mydata<-data.frame(X=c(3,7,11,15,19),A=c(2471,1893,1248,1078,556),B=c(1385,951,869,784,366),C=c(56,7,19,13,40))

以下过程构造三个序列的矩形范围数据(X轴起点终点、Y轴起点终点)

mydata$Axmin<-mydata$X-sqrt(mydata$A)/30

mydata$Axmax<-mydata$X+sqrt(mydata$A)/30

mydata$Aymin<-0

mydata$Aymax<-sqrt(mydata$A)/15

mydata$Bxmin<-mydata$X+sqrt(mydata$A)/30-sqrt(mydata$B)/15

mydata$Bxmax<-mydata$X+sqrt(mydata$A)/30

mydata$Bymin<-0

mydata$Bymax<-sqrt(mydata$B)/15

mydata$Cxmin<-mydata$X+sqrt(mydata$A)/30-sqrt(mydata$C)/10

mydata$Cxmax<-mydata$X+sqrt(mydata$A)/30

mydata$Cymin<-0

mydata$Cymax<-sqrt(mydata$C)/10

仔细体会我在设置以上起始点时所用到的思路

  • 其中第一个序列在最底层,可以使其中心对齐

  • 第二、三个序列则需要对齐第一个序列的右侧

  • 原数据开方后仍然很大需要酌情进行压缩标度(这里除以15)

数值标签和文本标签

mydata$text<-c("University of\n Pennsylvania","University of\n Notre Dame","Princeton\n University","Stanford\n University","California Institute\n of Technology")

mydata$full<-c("31663","16548","27189","34348","5225")

设置字体为arial字体

windowsFonts(myFont = windowsFont("arial"))

运行以下图表函数:

ggplot(mydata)+

geom_rect(aes(xmin=Axmin,xmax=Axmax,ymin=Aymin,ymax=Aymax),fill="#59AF8A")+

geom_rect(aes(xmin=Bxmin,xmax=Bxmax,ymin=Bymin,ymax=Bymax),fill="#0074A3")+

geom_rect(aes(xmin=Cxmin,xmax=Cxmax,ymin=Cymin,ymax=Cymax),fill="#C72733")+

geom_linerange(aes(x=X+2,ymin=0,ymax=4.8),col="grey",linetype=2)+

ylim(-.5,6)+

labs(x="",y="")+

geom_text(aes(x=X,y=4.5,label=text),size=4,fontface="bold",family="myFont")+

geom_label(aes(x=X,y=3.7,label=full),fill="#EFE5CA",colour="black",fontface="bold",size=3.5,label.r=unit(0.15,"lines"),family="myFont")+

geom_text(aes(x=Axmin,y=Aymax,label=A),hjust=-.2,vjust=1,size=3.5,col="white",family="myFont")+

geom_text(aes(x=Bxmin,y=Bymax,label=B),hjust=-.2,vjust=1,size=3.5,col="white",family="myFont")+

geom_text(aes(x=Cxmin,y=Cymax,label=C),hjust=-.2,vjust=1,size=3,col="white",family="myFont")+

annotate("text",x=2.5,y=5.7,label="Class Struggle",col="black", size=6,family="myFont")+

annotate("text",x=8.85,y=5.2,label="A spot on a university or college's waitlist rarely translates into admission. A look at the numbers for several institutions", size=4,family="myFont")+

annotate("text",x=3.9,y=-.32,label="Source:The universities and 2011-2012 Common Data Set",col="black",size=3,family="myFont")+

annotate("text",x=19.8,y=-.32,label="The wall Street Jaunual",col="black",size=3,family="myFont")+

theme_nothing()+

theme(panel.background=element_rect(fill="#F5F2E1"))

建议保存尺寸(1035*330)

建议使用Cairo包进行保存操作:

使用方法如下:

font.add("myfont", "arial.ttf")

CairoPNG(file="C:/Users/Administrator/Desktop/image.png",width=1035,height=330)

showtext.begin()

……

showtext.end()

dev.off()

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣同学加微信:tstoutiao,邀请您加入头条数据爱好者交流群,数据爱好者们都在这儿。

本文来源自天善社区EasyCharts的博客,作者:杜雨。

原文链接:https://www.hellobi.com/u/38793 。

举报
评论 0