今天这篇之前曾有涉略过,就是利用ggplot的辅助插件工具——scatterpie制作基于气泡图的饼图,之前曾在地图图层上演示过此种类似图表,不过这里我将其与折线图融合,案例来源于陈荣兴老师的名作——《Excel图表拒绝平庸》。
library("ggplot2") library("scatterpie") library("Cairo")
数据集构造:
mydata<-c(1,1,1,1,1,1,1,1,1,2,3,2,3,5,5,1,1,1,1,1,2,2,4,5,1,3,2,3,5,5,4,2,4,2,1,2,1,1,0.5,0.5) Dummy<-5*seq(1:8) mynewdata<-matrix(mydata,nrow=8,ncol=5,byrow=T) colnames(mynewdata)<-c("S1","S2","S3","S4","S5") mynewdata<-as.data.frame(mynewdata) as.integer(mynewdata1$Year)
mynewdata1<-cbind(Year,Dummy,Data,mynewdata) as.integer(mynewdata1$Dummy)
构造色盘:
color1<-c("#FF2D2D","#F79646","#4BACC6","#FFC000","#92D050") color2<-c("#17375E","#23538D","#558ED5","#8EB4E3","#C6D9F1")
色盘1图表输出:
CairoPNG(file="C:/Users/Administrator/Desktop/scatterpie1.png",width=500,height=330) ggplot()+ geom_line(data=mynewdata1,aes(x=Dummy,y=Data,group=1),col="#085264",size=.8)+ geom_scatterpie(data=mynewdata1,aes(x=Dummy,y=Data,r=2),cols=colnames(mynewdata1)[4:8],color=NA)+ ylim(0,25)+ scale_fill_manual(values=color1)+ scale_x_continuous(breaks=mynewdata1$Dummy,labels=c(2004:2011))+ guides( fill=guide_legend(label.position ="top"))+ theme( axis.title=element_blank(), legend.title=element_blank(), panel.background=element_blank(), axis.line=element_line(), axis.ticks=element_line(), legend.direction="horizontal", legend.position=c(0.15,0.9), ) dev.off()
色盘2输出:
CairoPNG(file="C:/Users/Administrator/Desktop/scatterpie2.png",width=500,height=330) ggplot()+ geom_line(data=mynewdata1,aes(x=Dummy,y=Data,group=1),col="#085264",size=.8)+ geom_scatterpie(data=mynewdata1,aes(x=Dummy,y=Data,r=2),cols=colnames(mynewdata1)[4:8],color=NA)+ ylim(0,25)+ scale_fill_manual(values=color2)+ scale_x_continuous(breaks=mynewdata1$Dummy,labels=c(2004:2011))+ guides( fill=guide_legend(label.position ="top"))+ theme( axis.title=element_blank(), legend.title=element_blank(), panel.background=element_blank(), axis.line=element_line(), axis.ticks=element_line(), legend.direction="horizontal", legend.position=c(0.15,0.9), ) dev.off()
本来原始图表在案例中使用VBA写的,大体思路是在折线图对应点位置强制插入8个饼图对象。(就是对应八个点位置的饼图)思路虽好,可是VBA的笨拙语法操作起来实在不易,代码量巨大。
源案例代码截图:
而使用R语言,不算主题修饰成分,核心代码只有短短6行,由此可见R在图形操控方面的便利。
本例适用场景:
核心要点: