使用Pandas pivot_table实现带重叠与分组的柱状图
使用Pandas + Python实现分组柱状图
没问题,我来帮你搞定这个分组柱状图的实现!咱们一步步来,确保每个环节都贴合你的需求:
首先得把必要的库导进来,Pandas用来处理CSV数据,Matplotlib负责绘图(Pandas的plot底层也是调用Matplotlib,所以得一起安装好):
import pandas as pd import matplotlib.pyplot as plt
接下来读取你的CSV文件到DataFrame里,假设你的文件名叫data.csv,如果路径不在当前目录,记得加上完整路径:
df = pd.read_csv('data.csv')
然后咱们按照你的要求,给每个类别定义对应的颜色——A是浅灰色、B是最浅蓝色,我后续补了渐变的蓝色系(你要是有更精准的颜色需求,直接替换十六进制色值就行):
color_map = { 'A': '#d3d3d3', # 浅灰色 'B': '#add8e6', # 最浅蓝色 'C': '#87ceeb', # 淡蓝色 'D': '#4682b4', # 钢蓝色 'E': '#1e90ff' # 深蓝色 }
接下来就是核心的绘图环节了。假设你的两个CO开头的列是CO_metric1和CO_metric2,咱们直接用Pandas的plot.bar()生成分组柱状图,同时绑定好颜色:
# 先过滤出category列是A-E的行(如果CSV里有其他无关类别,这一步能帮你筛掉) filtered_df = df[df['category'].isin(['A', 'B', 'C', 'D', 'E'])] # 给图表整个好看点的风格,默认的太朴素了 plt.style.use('seaborn-v0_8') # 绘制分组柱状图:x轴是类别,y轴是两个CO指标,每个类别对应两个柱子 ax = filtered_df.plot( x='category', y=['CO_metric1', 'CO_metric2'], # 这里替换成你CSV里实际的CO开头列名 kind='bar', color=[color_map[cat] for cat in filtered_df['category'].unique()], figsize=(10, 6), # 设置图表大小 rot=0 # x轴类别标签保持水平,不旋转 ) # 给图表加些标注,让别人一眼看懂 ax.set_title('按类别分组的CO指标柱状图', fontsize=14) ax.set_xlabel('类别', fontsize=12) ax.set_ylabel('数值', fontsize=12) # 自定义图例名称,替换成你两个CO列的实际含义 ax.legend(['CO指标1', 'CO指标2'], loc='upper right') # 自动调整布局,避免标签被截断 plt.tight_layout() # 显示图表 plt.show()
最后提几个小细节:
- 一定要把代码里的
CO_metric1和CO_metric2换成你CSV里真实的列名 - 如果你的CSV里
category列只有A-E,那filtered_df这一步可以省略,直接用原df就行 - 颜色值可以用系统自带的取色工具或者在线取色器获取,替换
color_map里的十六进制值就能精准匹配你附图的颜色
内容的提问来源于stack exchange,提问作者BoroBorooooooooooooooooooooooo
相关产品推荐
相关产品推荐

