zl程序教程

您现在的位置是:首页 >  其他

当前栏目

R绘图 | 不等宽柱形图绘制

2023-03-07 09:47:21 时间

不等宽柱形图是一个相对于(等宽)柱形图的概念,「除了其高度以外,宽度同样代表一个指标」,可以同时反映两个具有相关性的指标大小。

分步讲解

1 构建数据集

mydata<-data.frame(Name=paste0("Sample",1:4),Width=c(35,30,10,5),Value=c(56,37,63,59))

我们希望以Name为横坐标,Value为纵坐标作柱形图,同时用柱子的宽度表示Width。

2 构建柱子的坐标

# 构建柱子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])
}

3 ggplot作图

# 作图
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()