从DataFrame绘制多柱状图时出现Key Error问题求助
问题解决:Key Error与堆叠多柱状图绘制
问题根源
你加载CSV时没把第一列(Bots/Speed这些)设为行索引,所以DataFrame里Bots不是行标签,而是第一列(默认叫Unnamed: 0)的一个值,用loc[]自然找不到,触发Key Error。
修正方案
方案1:修复索引后沿用你的逻辑
读CSV的时候加上index_col=0参数,把第一列设为行索引,这样你的loc写法就能正常工作,同时实现堆叠效果:
import pandas as pd import matplotlib.pyplot as plt # 关键:指定index_col=0,把第一列设为行索引 df = pd.read_csv('MAIN_DATAFRAME.csv', index_col=0) def plot_graph_1(MAIN_DATAFRAME): df1 = MAIN_DATAFRAME.loc[['Bots']].transpose() df2 = MAIN_DATAFRAME.loc[['Speed']].transpose() df3 = MAIN_DATAFRAME.loc[['Weight']].transpose() df4 = MAIN_DATAFRAME.loc[['Chargers']].transpose() # 绘制堆叠柱状图,需指定stacked=True ax = df1.plot(kind='bar', stacked=True, label='Bots') df2.plot(ax=ax, kind='bar', stacked=True, label='Speed') df3.plot(ax=ax, kind='bar', stacked=True, label='Weight') df4.plot(ax=ax, kind='bar', stacked=True, label='Chargers') plt.legend() plt.show() plot_graph_1(df)
方案2:更简洁的堆叠图写法
不用拆分四个DataFrame,直接转置原DataFrame后调用plot就能生成堆叠柱状图,代码更高效:
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('MAIN_DATAFRAME.csv', index_col=0) # 转置后,Run 1~10作为x轴,四个指标自动作为堆叠柱子 df.transpose().plot(kind='bar', stacked=True, figsize=(10,6)) plt.title('Bots/Speed/Weight/Chargers Stacked Bar Chart') plt.xlabel('Runs') plt.ylabel('Values') plt.show()
额外注意点
- 你原代码里的
ax.bar(ax, df1)是错误写法,ax.bar不需要把ax作为第一个参数,且已经用pandas的plot生成了图表,这行代码可以直接删掉。 - 如果CSV的第一列有明确列名(比如叫
Metric),加载时可以用index_col='Metric'替代index_col=0,逻辑更清晰。
内容的提问来源于stack exchange,提问作者creyes
相关产品推荐
相关产品推荐

