代码报错求助:筛选指定州数据并绘制堆叠柱状图
筛选指定州并绘制堆叠柱状图代码修正
原代码存在的问题
- 未对数据行进行州筛选,直接绘制全量数据
x= states['AR', 'MI', 'CA', 'WI']语法错误:states变量未定义,索引方式不符合Python规范plt.xticks('states')用法错误:xticks需传入刻度位置与对应标签,而非字符串- 颜色列表仅提供3种,但需对应4个百分比列(
pct_clinton/pct_trump/pct_johnson/pct_other),数量不匹配 - 缺少必要的库导入与图形显示步骤
修正后的代码
import pandas as pd import matplotlib.pyplot as plt # 假设数据已加载到df中,若未加载需补充读取逻辑: # df = pd.read_csv("你的数据文件路径") # 1. 筛选目标州数据,保留指定列并去除空值 target_states = ['AR', 'AL', 'CA'] df_filtered = df[df['state'].isin(target_states)][['state', 'pct_clinton', 'pct_trump', 'pct_johnson', 'pct_other']].dropna() # 2. 将state设为索引,让x轴直接显示州名 df_filtered.set_index('state', inplace=True) # 3. 绘制堆叠柱状图,颜色数量匹配4个数据列 ax = df_filtered.plot(kind='bar', stacked=True, color=['#e74c3c', '#3498db', '#2ecc71', '#95a5a6'], figsize=(8, 6)) # 4. 调整图表样式 plt.ylabel('得票百分比') plt.title('指定州候选人得票占比') plt.xticks(rotation=0) # 保持州名标签水平,提升可读性 # 5. 调整图例位置,避免遮挡图表 ax.legend(['Clinton', 'Trump', 'Johnson', 'Other'], bbox_to_anchor=(1.05, 1), loc='upper left') # 显示图形 plt.tight_layout() plt.show()
代码说明
- 用
isin(target_states)精准筛选目标州的数据行 - 将
state设为索引后,pandas绘图会自动把索引作为x轴刻度标签,无需手动设置 - 补充第4种颜色对应
pct_other列,确保每个数据系列都有匹配的颜色 - 通过
xticks(rotation=0)让州名标签水平显示,解决标签重叠问题 - 调整图例位置到图表外侧,避免遮挡堆叠柱体
内容的提问来源于stack exchange,提问作者TusharGaurav
相关产品推荐
相关产品推荐

