You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib柱状图颜色分配异常问题求助

问题原因

你当前的代码是将df.owner中的每一行数据单独作为一个x轴元素,也就是每个数据点对应一根柱子。而color参数的颜色列表会被循环应用到每一根柱子上(红→黄→黑→蓝→橙→红……),这就造成了颜色看似“随机分布”的效果,而非你预期的每个owner类别对应统一颜色。

解决方案

根据你的需求,提供两种实现方式:

方案1:绘制分组汇总后的柱状图(每个类别一根柱子)

如果目标是展示每个owner类别的汇总售价(比如均值、总和),先对数据分组聚合再绘图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_excel('CAR DETAILS FROM CAR DEKHO.xlsx')

# 转换价格单位
df["price_sterling"] = df["selling_price"] * 0.011

# 按owner分组,计算平均售价(也可替换为sum计算总售价)
grouped_df = df.groupby('owner')['price_sterling'].mean().reset_index()

# 定义与类别匹配的颜色列表
colors = ['red', 'yellow', 'black', 'blue', 'orange']

# 绘制柱状图,每个类别对应一种颜色
plt.bar(grouped_df['owner'], grouped_df['price_sterling'], color=colors)
plt.xticks(rotation="vertical")
plt.xlabel('车主类型')
plt.ylabel('平均售价(英镑)')
plt.title('不同车主类型的汽车平均售价')
plt.show()

方案2:保留单个样本柱子,同类别统一颜色

如果需要保留每个数据点的柱子,同时让同一owner类别的柱子颜色一致,需先为每个数据点匹配对应颜色:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_excel('CAR DETAILS FROM CAR DEKHO.xlsx')

# 转换价格单位
df["price_sterling"] = df["selling_price"] * 0.011

# 建立车主类型与颜色的映射关系
owner_color_map = {
    'First Owner': 'red',
    'Second Owner': 'yellow',
    'Third Owner': 'black',
    'Fourth & Above Owner': 'blue',
    'Test Drive Car': 'orange'
}

# 为每个数据点分配对应颜色
df['color'] = df['owner'].map(owner_color_map)

# 绘制柱状图,传入每个数据点的颜色
plt.bar(df['owner'], df['price_sterling'], color=df['color'])
plt.xticks(rotation="vertical")
plt.xlabel('车主类型')
plt.ylabel('售价(英镑)')
plt.title('不同车主类型的汽车售价')
plt.show()

内容的提问来源于stack exchange,提问作者John Munns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:55:17