查看原文
其他

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

2017-03-28 数据小魔方

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


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()


作者简介:



欢迎关注魔方学院QQ群

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

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