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
相关产品推荐
相关产品推荐

