首页 > 解决方案 > 如何在熊猫中仅将数据框的键显示为绘图的 xticks?

问题描述

我有一个带有键的数据框,由几个数据框的串联形成,我想制作一个key单独的元素作为 的图xtickslabel,但默认索引编号显示在键旁边,作为 xtickslabel。xticklabels 现在是元组(key, index)而不是key. 我想摆脱默认的索引值。下面带有 plot 语句的示例代码图,(4D, 0), (5D, 0), (6D, 0), and (7D, 0)生成为 xticklabels,但是,我想要4D, 5D, 6D, 7D的只是 xticklabels。

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.plot.bar(title = 'Data', ylabel = 'y', xlabel = 'x')

标签: pythonpandasdataframe

解决方案


使用 for 语句,将每个索引中的第一项保存到列表中,并将其传递给 in 中的参数set_xticklabels

# Get the first value of each tuple.
indexList = [item[0] for item in alldata.index]

索引列表:

['4D', '4D', '4D', '4D', '5D', '5D', '5D', '5D', '6D', '6D', '6D', '6D']

所以完整的来源是..

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'])

# Get the first value of each tuple.
indexList = [item[0] for item in alldata.index]

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

# Set xticklabels
ax.set_xticklabels(indexList);

输出:
在此处输入图像描述


编辑

  1. 创建索引“4D”、“5D”、“6D”和“7D”的 DataFrame。
index = ['4D', '5D', '6D', '7D']

dfA = pd.DataFrame([2, 4, 6, 8], columns=['A'], index=index)
dfB = pd.DataFrame([4, 6, 8, 10], columns=['B'], index=index)
dfC = pd.DataFrame([6, 8, 10, 12], columns=['C'], index=index) 
  1. 设置为axis=1,则 Dataframes 将横向合并。
alldata = pd.concat([dfA, dfB, dfC], axis=1)
  1. 绘图(与您的代码相同)
alldata.plot.bar(title = 'Data', ylabel = 'y', xlabel = 'x')

输出:


推荐阅读