调用df.plot.bar()绘制柱状图出现多柱扭曲如何解决
问题原因
.plot.bar()完全可以实现你需要的单柱状图效果,出现多柱分组是调用方式有误:
- 你没有显式指定x轴对应的列,而你的
cell id列本身是数值类型,pandas默认会将DataFrame中所有数值列识别为独立的y轴绘图系列,相当于同时把cell id、read counts两列都作为数值画成柱子,才会出现每个x位置并排多柱的聚集效果。
正确实现方法
两种写法都可以得到你预期的单柱效果:
方法1:绘图时直接指定x、y映射列
调用绘图命令时显式声明横轴、纵轴对应的列名即可,不需要提前修改DataFrame结构:
# 核心是明确传入x和y参数 df.plot.bar(x='cell id', y='read counts')
方法2:提前将x轴列设置为DataFrame索引
pandas的plot.bar()默认会将DataFrame的索引作为x轴标签,剩余数值列作为y轴数据,因此提前把cell id设为索引后,直接调用绘图命令也能得到正确结果:
# 设置cell id为索引 df_indexed = df.set_index('cell id') # 此时直接调用即可,剩余列只有read counts,不会出现多组柱 df_indexed.plot.bar()
大数据集优化提示
你的实际数据集规模较大,直接绘图可能出现x轴标签拥挤、图表过窄的问题,可以在绘图时传入参数调整显示效果:
# figsize调整图表宽高,rot调整x轴标签旋转角度,width调整柱子宽度 df.plot.bar( x='cell id', y='read counts', figsize=(25, 6), rot=90, width=0.8 )
注:直方图
hist是用来展示数值分布的,和你需要的按类别展示数值的柱状图确实是不同图表类型,你不需要改用直方图。
内容的提问来源于stack exchange,提问作者Caroline
相关产品推荐
相关产品推荐

