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
相关产品推荐
相关产品推荐

