如何使用字典数据绘制指定x轴排序的plot.bar双数据集柱状图
解决方案
你原有代码的核心问题有两个:
- 直接传入字典构造DataFrame时,默认会把字典的键作为列名,两行索引对应每个值的两个元素,和你需要的「字典键作为x轴分类、两个值作为两组柱子」的结构完全不匹配
- 没有按每个键对应的第一个数值做升序排序,而且原数值是字符串格式,直接排序会按字符串规则出错(比如字符串
'10'会排在'2'前面)
可直接运行的修改后代码
import pandas as pd import matplotlib.pyplot as plt # 给定数据集 x = {'A': ['12', '100'], 'B': ['2', '101'], 'C': ['3', '102'], 'D': ['4', '103'], 'E': ['5', '104'], 'F': ['7', '105'], 'I': ['6', '106'], 'J': ['8', '107'], 'K': ['9', '108'], 'L': ['10', '109'], 'M': ['11', '110'], 'N': ['1', '111']} # 转换字典结构:每一行对应一个分类,同时把字符串数值转为整数 df = pd.DataFrame( [[key, int(val[0]), int(val[1])] for key, val in x.items()], columns=['分类', '第一组数值', '第二组数值'] ) # 按第一组数值升序排序,得到要求的x轴顺序 df = df.sort_values('第一组数值').reset_index(drop=True) # 设置分类列为索引,绘图时会自动作为x轴刻度 df = df.set_index('分类') # 绘制双组柱状图 df.plot.bar(rot=15, title="双组数据柱状图") plt.show()
代码说明
- 构造DataFrame时先把原字典的键值对展开为行结构,同时将字符串格式的数值转为整数,保证排序逻辑正确
- 按第一组数值排序后刚好符合你要求的
N→B→C→D→E→I→F→J→K→L→M→A的x轴顺序 - 索引设置为分类列后,pandas绘图会自动把索引作为x轴,两列数值分别生成两组柱子,符合你的需求
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

