好久没有更新了,所有话不多说,直奔我们今天的主题,如何用R语言中ggplot2制作旋风图。其实在上一篇文章就有介绍到旋风图的应用,当时是使用basic plot制作的,有兴趣的可以研究一下。下面就开始介绍ggplot2如何制作旋风图:
(1).认识数据
首先我们需要一个用于可视化的数据,旋风图就是双方向的条形图,因此需要两组数据,下面是本次所使用的数据:
数据是由各个省份的销售总业绩以及对应客单均两组数据组成的。
(2).数据处理
要绘制旋风图的效果,我们需要对数据集进行一些处理。由于旋风图有两个方向,因此两组数据需要调整为其中一组数据符合为正号,另外一组则为负号。但是我们要考虑两组数据的量纲,明显总业绩是比客单均要大很多,如果直接绘制图的话,客单均的数据的显示效果就非常不明显了,所以我们可以在调整符合的同时,将客单均这组数据等倍数放大,本次数据我们就设置倍数为130,具体的数据集可以视图形的制作效果而调整。
(3).绘制旋风图
#重命名数据集,方便引用书写a-省份,b-业绩,c-客单均,d-调整单均
names(data1) = c('a','b','c','d')
#加载ggplot2
library(ggplot2)
# 使用coord_flip()反转x、y轴
p = ggplot(data1)+geom_bar(aes(x=a,y=b),stat = 'identity')+geom_bar(aes(x=a,y=d),stat = 'identity')+coord_flip()
最终会得到上面的图形。看上去已经有旋风图的味道了,但是看上去十分的丑,我们需要进一步调整,这才是体现ggplot2的可视化效果。
(4).调整图形
# 调整条形的颜色,宽度,透明度,使用主题theme_minimal()
p = ggplot(data1)+geom_bar(aes(x=a,y=b),width = 0.6,stat = 'identity',alpha=sort(c(0.38,0.48,0.58,0.68,0.78,0.88),decreasing =T),fill = rgb(239,166,102,maxColorValue =255))
+theme_minimal()+coord_flip()+xlab("")+ylab("")
+geom_bar(aes(x=a,y=d),width = 0.6,stat = 'identity',alpha=sort(c(0.38,0.48,0.58,0.68,0.78,0.88),decreasing =T),fill = rgb(99,178,238,maxColorValue =255))
颜色我们使用了蓝色和橙色,透明度设置了梯级度,条形的宽度也使用更合适的参数。但是我们可以看到轴上面的还有科学计数的标度,而且对于调整客单均,坐标轴也显得没有意义了,因此我们可以因此横轴,并且加上数据标签,这样的话就可以更加凸显数据的内容了。
p1 =p+scale_y_continuous(breaks =seq(-120000,650000,150000),labels=NULL)
+geom_text(aes(x=a,y=b+30000,label=b),family='Te',size=4)
+geom_text(aes(x=a,y=d-15000,label=c),family='Te',size=4)
最后我们可以对两组数据进行说明和添加分界线,使图形的内容更易被人读懂,并且也可以按照业绩升序排列,调整各个省份的位置,下面就提供完整的代码和最终的效果图,有兴趣的可以按照自己的风格继续调整参数。
p = ggplot(data1)+geom_bar(aes(x=a,y=b),width = 0.6,stat = 'identity',alpha=sort(c(0.38,0.48,0.58,0.68,0.78,0.88),decreasing =T),fill = rgb(239,166,102,maxColorValue =255))+
theme_minimal()+coord_flip()+xlab("")+ylab("")+geom_text(aes(x=a,y=b+30000,label=b),family='Te',size=4)+
scale_y_continuous(breaks =seq(-120000,650000,150000),labels=rep(" ",6))+geom_bar(aes(x=a,y=d),width = 0.6,stat = 'identity',alpha=sort(c(0.38,0.48,0.58,0.68,0.78,0.88),decreasing =T),fill = rgb(99,178,238,maxColorValue =255))+
scale_x_discrete(limits=c("江苏","上海","重庆","广东","湖南","北京"))+geom_text(aes(x=a,y=d-15000,label=c),family='Te',size=4)+geom_text(x=6.5,y=-55000,label="客单均",size=4,fontface="bold")+
geom_text(x=6.5,y=200000,label='总产出',size=4,fontface="bold")+geom_segment(x=0.7,xend=6.3,y=0,yend=0,size=2)