如何合并多个DataFrame绘制分组条形图 代码运行错误排查
问题原因与修正方案
错误点梳理
- 绘图x轴字段配置错误:原代码将
Cat作为x轴分组维度,与需求的「按Area分组,组内拆分Cat类别」逻辑相反 - 绘图方法选择错误:pandas内置的
plot.bar默认不支持按指定字段自动拆分组内次级分类,你要实现的分组条形图直接使用seaborn的barplot方法即可,通过hue参数指定组内拆分的分类字段
修正后可运行代码
import sys import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from matplotlib import rcParams test_dict1 = {'item1':4, 'item2':6, 'item3':7,'item4':8,'item5':10} test_dict2 = {'item1':4, 'item2':6, 'item3':7,'item7':8,'item6':10} test1_df = pd.DataFrame(test_dict1.items(), columns=['Area','Number']) test2_df = pd.DataFrame(test_dict2.items(), columns=['Area','Number']) test1_df['Cat'] = 'Cat1' test2_df['Cat'] = 'Cat2' dfs = [test1_df,test2_df] result = pd.concat(dfs) sns.set(style="whitegrid") rcParams.update({'figure.autolayout': True}) fig, ax1 = plt.subplots(figsize=(12,6)) # 核心修改点:使用seaborn的barplot,指定x为Area,hue为Cat拆分组内条形 sns.barplot(x='Area', y='Number', hue='Cat', data=result, ax=ax1) plt.tight_layout() plt.xticks(rotation=45, ha="right") plt.show()
效果说明
运行上述代码后会自动生成7组条形,对应item1到item7共7个Area取值,每组内的两个条形分别对应Cat1、Cat2的Number数值,缺失值对应的位置不会绘制条形,完全符合预期需求。
内容的提问来源于stack exchange,提问作者Slowat_Kela
相关产品推荐
相关产品推荐

