Posted on
https://upload-images.jianshu.io/upload_images/2013412-89ce0387d84fce90..blob!thumbnail

左边这个柱形图我们平时用的很多,见的也很多,但是右边的柱形图却并不多见,用过的人更少,因此今天我们就来看看右边的图形可以用在什么地方?怎么制作?

右边的图形俗称“不等宽柱形图”,顾名思义,就是宽度不一致的柱形图(自动生成的柱形图柱子宽度是一致的)。

最开始,当两组数据具有乘法关系的时候使用不等宽柱形图,例如在计算公司各类业务总成本时,可以用柱子的长度表示该业务产品数量,柱子的宽度表示该业务单个产品的成本,那么柱子的面积就代表该业务的总成本。

随着大家对该图表的接受程度越来越高,只要两组数据有相关关系,也可以使用,例如营业额和营业额增长率、销售额和销售资源占比、销售额和市场占有率等等。

所以作为常用图表之一,“不等宽柱形图”的制作也是职场人士必须学会的。

“不等宽柱形图”归根结底还是柱形图,所以我们要想办法把它从等宽转化为不等宽。

一、Excel实现

第一步:整理原始数据

https://upload-images.jianshu.io/upload_images/2013412-9493c9d49c45db8b..blob!thumbnail

第二步:添加辅助数据

(1)计算累计数量

累计数量有多少就代表有多少个小柱子。

在D2单元格输入公式=SUM($B$2:B2)。

https://upload-images.jianshu.io/upload_images/2013412-4b0efcd980d22d49..blob!thumbnail

(2)构建制图原始数据

因为业务种类有5种,所以要构建5列,5列的数据错开,数据内容为“成本”。

因为累计业务数量为15,所以要构建15行。

https://upload-images.jianshu.io/upload_images/2013412-45b8452e912f1c46..blob!thumbnail

填充数据:5个种类1,那么第一列为5个28;7个种类2,那么第二列为7个21;以此类推。

B9单元格输入公式=IF(A9<=$D$2,$C$2,””)

C9单元格输入公式=IF(AND(A9>$D$2,A9<=$D$3),$C$3,””)

D9单元格输入公式=IF(AND(A9>$D$3,A9<=$D$4),$C$4,””)

E9单元格输入公式=IF(AND(A9>$D$4,A9<=$D$5),$C$5,””)

F9单元格输入公式=IF(AND(A9>$D$5,A9<=$D$6),$C$6,””)

(如果数据少也可以手动输入)

依次拖动公式完成数据填充。

https://upload-images.jianshu.io/upload_images/2013412-6f3a99f9977d7245..blob!thumbnail

第三步:插入柱形图

【插入图表】-【所有图表】-【柱形图】-【簇状柱形图】-选择3个示例图表中的第2个

https://upload-images.jianshu.io/upload_images/2013412-4e528edbb380bab1..blob!thumbnail

第四步:美化图表

设置数据系列格式,将系列重叠修改为100%,间隙宽度修改为0%。

https://upload-images.jianshu.io/upload_images/2013412-f8edf7f5b7844187..blob!thumbnail

修改图表标题,添加对应数据后即完成“不等宽柱形图”的制作。

https://upload-images.jianshu.io/upload_images/2013412-caa3e9ef6274e6ef..blob!thumbnail

二、R语言实现

library(ggplot2)
library(Cairo)
library(showtext)

mydata<-data.frame(业务种类=paste0("种类",1:5),数量=c(5,2,4,3,1),成本=c(28,21,18,19,30))
mydata$xmin<-0
for (i in 2:5){
  mydata$xmin[i]<-sum(mydata$数量[1:i-1])
}
#构造矩形X轴的终点(最大点)
for (i in 1:5){
  mydata$xmax[i]<-sum(mydata$数量[1:i])
}
#构造数据标签的横坐标:
for (i in 1:5){
  mydata$label[i]<-sum(mydata$数量[1:i])-mydata$数量[i]/2
}


ggplot(mydata)+
  geom_rect(aes(xmin=xmin,xmax=xmax,ymin=0,ymax=成本,fill=业务种类),colour="black",size=0.25)+
  geom_text(aes(x=label,y=成本+1.5,label=成本),size=4,col="black")+
  geom_text(aes(x=label,y=-2.5,label=业务种类),size=4,col="black")+
  ylab("成本")+
  xlab("数量")+
  ylim(-2.5,35)+
  theme(panel.background=element_rect(fill="white",colour=NA),
        panel.grid.major = element_line(colour = "grey60",size=.25,linetype ="dotted" ),
        panel.grid.minor = element_line(colour = "grey60",size=.25,linetype ="dotted" ),
        text=element_text(size=15),
        plot.title=element_text(size=15,hjust=.5),#family="myfont",
        legend.position="none"
  )+ scale_x_continuous(breaks = NULL,labels = NULL)

发表评论

邮箱地址不会被公开。 必填项已用*标注