You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Matplotlib绘制条形图居中聚集及X轴标签异常的问题咨询

问题根源&快速解决办法

嘿,我一眼就瞅出问题所在了——这根本不是条形图挤在中心的空间适配问题,是你创建的数据框结构完全搞错啦!

你用pd.DataFrame.from_dict([counts])生成的是一个只有1行、9列的数据框,长这样:

set1  set2  set3  set4  set9  set5  set6  set7  set8
0   110    12   661    34     2     7    23    53    65

当你调用df.plot.bar()时,pandas默认是按行来画条形图的——也就是把这一行里的所有列值,全堆到同一个x轴位置(标签是0),所以所有条形都挤成一团,X轴自然只会显示中间那个孤零零的"0"。

正确的处理方式(两种可选)

方式1:转成"长格式"数据框(推荐)

把字典转换成「类别列+数值列」的结构,这样每个类别会对应独立的条形:

import pandas as pd
import matplotlib.pyplot as plt

counts = {'set1': 110, 'set2': 12, 'set3': 661, 'set4': 34, 'set9': 2, 'set5': 7, 'set6': 23, 'set7': 53, 'set8': 65}

# 转换成长格式数据框
df = pd.DataFrame(counts.items(), columns=['分组', '数量'])
# 可选:按分组名称排序,让条形顺序更规整
df = df.sort_values('分组')

# 绘制条形图,指定x轴为分组列
ax = df.plot.bar(x='分组', y='数量', rot=45)
ax.get_legend().remove()
# 加上这句,防止x轴标签被图片边缘截断
plt.tight_layout()
plt.savefig('counts.png')

方式2:转置宽格式数据框

如果你不想改数据结构,直接把原数据框转置(行和列交换)再画也行:

import pandas as pd
import matplotlib.pyplot as plt

counts = {'set1': 110, 'set2': 12, 'set3': 661, 'set4': 34, 'set9': 2, 'set5': 7, 'set6': 23, 'set7': 53, 'set8': 65}

df = pd.DataFrame.from_dict([counts])
# 转置后绘制,此时列名会变成x轴标签
ax = df.T.plot.bar(rot=45)
ax.get_legend().remove()
plt.tight_layout()
plt.savefig('counts.png')

效果说明

两种方式都会让每个set(set1-set9)对应独立的条形,X轴标签会正常显示每个分组名称,再也不会挤在中心啦。

内容的提问来源于stack exchange,提问作者Slowat_Kela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:52:33