如何基于pandas透视表颜色列为条形图配色并调整坐标轴方向
问题解答
该需求完全可以通过for循环实现,也可以使用更简洁的直接传参方式实现,两种实现方案如下:
前置数据处理
先将透视表的多层索引转为普通列,方便提取标签和颜色值:
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 你原有生成透视表的代码 pivot = pd.pivot_table(df, index=['Description', 'ColorID'], values=['Turnover'], aggfunc=np.sum) # 重置索引,把Description、ColorID从索引转为可调用的列 pivot = pivot.reset_index() # 拼接生成x轴显示的标签 pivot['x_label'] = pivot['Description'] + ' ' + pivot['ColorID']
方案1:for循环实现(你要求的实现方式)
plt.figure(figsize=(16, 8)) # 遍历每一行数据逐个生成条形 for index, row in pivot.iterrows(): plt.bar(x=index, height=row['Turnover'], color=row['ColorID']) # 设置x轴标签垂直显示(旋转90度) plt.xticks( ticks=range(len(pivot)), labels=pivot['x_label'], rotation=90 ) plt.xlabel("产品(对应颜色)") plt.ylabel("营业额") plt.tight_layout() # 自动调整布局,避免x轴标签被截断 plt.show()
方案2:无循环简洁实现
不需要循环,直接向plt.bar传递颜色列表即可实现相同效果:
plt.figure(figsize=(16, 8)) plt.bar( x=pivot['x_label'], height=pivot['Turnover'], color=pivot['ColorID'] ) plt.xticks(rotation=90) plt.xlabel("产品(对应颜色)") plt.ylabel("营业额") plt.tight_layout() plt.show()
补充说明
如果你的ColorID字段存储的是十六进制颜色编码,可以直接被matplotlib识别;如果是自定义的颜色编号,你可以提前构造一个颜色映射字典,把编号转换为matplotlib支持的颜色值再传入即可。
内容的提问来源于stack exchange,提问作者DSouthy
相关产品推荐
相关产品推荐

