不等宽柱形图是一个相对于(等宽)柱形图的概念,「除了其高度以外,宽度同样代表一个指标」,可以同时反映两个具有相关性的指标大小。
mydata<-data.frame(Name=paste0("Sample",1:4),Width=c(35,30,10,5),Value=c(56,37,63,59))
我们希望以Name为横坐标,Value为纵坐标作柱形图,同时用柱子的宽度表示Width。
# 构建柱子X轴的起点,从0开始
mydata$xmin<-0
for (i in 2:4){
mydata$xmin[i]<-sum(mydata$Width[1:i-1])
}
# 构造矩形X轴的终点,从第一个柱子的宽度开始
for (i in 1:4){
mydata$xmax[i]<-sum(mydata$Width[1:i])
}
# 作图
ggplot(mydata)+
geom_rect(aes(xmin=xmin,xmax=xmax,ymin=0,ymax=Value,fill=Name),
color="black",size=0.25,alpha=0.6)+
ylab("Value")+
xlab("Width")+
theme_bw()
作图时只需要将柱子的四个坐标映射给geom_rect,一张不等宽柱状图就完成啦!
如果想更换为条形图,只需要在最后加上coord_flip()。
# 作图
ggplot(mydata)+
geom_rect(aes(xmin=xmin,xmax=xmax,ymin=0,ymax=Value,fill=Name),
color="black",size=0.25,alpha=0.6)+
ylab("Value")+
xlab("Width")+
theme_bw()+
coord_flip()
# 构建数据集
mydata<-data.frame(Name=paste0("Sample",1:4),Width=c(35,30,10,5),Value=c(56,37,63,59))
mydata$xmin<-0
for (i in 2:4){
mydata$xmin[i]<-sum(mydata$Width[1:i-1])
}
# 构造矩形X轴的终点(最大点)
for (i in 1:4){
mydata$xmax[i]<-sum(mydata$Width[1:i])
}
# 作图
ggplot(mydata)+
geom_rect(aes(xmin=xmin,xmax=xmax,ymin=0,ymax=Value,fill=Name),
color="black",size=0.25,alpha=0.6)+
ylab("Value")+
xlab("Width")+
theme_bw()