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

pandas绘图时如何仅将DataFrame的key作为x轴刻度标签,隐藏默认索引

解决方案

方法1:直接修改绘图刻度标签(不改动原数据,推荐)

你仅需要在绘图时获取axes对象,将刻度标签替换为MultiIndex的第一层值即可,完整代码如下:

import pandas as pd

dfA = pd.DataFrame([2, 4, 6, 8], columns = ['A'])
dfB = pd.DataFrame([4, 6, 8, 10], columns = ['B'])
dfC = pd.DataFrame([6, 8, 10, 12], columns = ['C']) 

alldata = pd.concat([dfA, dfB, dfC], keys = ['4D', '5D', '6D', '7D'])

# 接收plot方法返回的axes对象
ax = alldata.plot.bar(title = 'Data', ylabel = 'y', xlabel = 'x')
# 提取MultiIndex第一层作为刻度标签
ax.set_xticklabels(alldata.index.get_level_values(0))

方法2:提前删除不需要的索引层级(改动原数据)

如果后续不需要用到第二层的原行索引,可以直接删掉MultiIndex的第二层,之后绘图会自动使用第一层作为刻度标签:

import pandas as pd

dfA = pd.DataFrame([2, 4, 6, 8], columns = ['A'])
dfB = pd.DataFrame([4, 6, 8, 10], columns = ['B'])
dfC = pd.DataFrame([6, 8, 10, 12], columns = ['C']) 

alldata = pd.concat([dfA, dfB, dfC], keys = ['4D', '5D', '6D', '7D'])
# 删除第二层行索引
alldata = alldata.droplevel(1)

alldata.plot.bar(title = 'Data', ylabel = 'y', xlabel = 'x')

原理说明

使用pd.concat的keys参数拼接DataFrame时,会自动生成多层行索引(MultiIndex),第一层是传入的keys值,第二层是各个原DataFrame的原生行索引。pandas默认会把多层索引的所有层级拼接为元组作为刻度标签,上述两种方法都是通过保留第一层索引值作为标签实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 13:45:03