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

如何在Python中创建展示销售额与利润双度量值的定制条形图

Python实现销售额条形图(结合利润维度的颜色映射)

下面分两种方案实现你的需求,分别对应渐变颜色映射和区间颜色划分场景:


一、渐变颜色映射(利润越高颜色越深)

这种方式通过连续的颜色渐变直观体现利润的高低,适合展示利润的连续变化趋势。我们使用matplotlib的颜色映射(colormap)来实现:

import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import cm
from matplotlib.colors import Normalize

# 1. 准备示例数据(可替换为你的真实数据)
data = {
    '产品': ['产品A', '产品B', '产品C', '产品D', '产品E'],
    '销售额': [12000, 9500, 15000, 8000, 11000],
    '利润率': [85, 62, 92, 20, 45]
}
df = pd.DataFrame(data)

# 2. 对利润率做归一化处理,适配颜色映射范围
norm = Normalize(vmin=df['利润率'].min(), vmax=df['利润率'].max())
# 选择渐变色系(Greens表示绿色系,利润越高颜色越深;也可换Blues/Reds等)
cmap = cm.get_cmap('Greens')
# 为每个数据生成对应颜色
bar_colors = cmap(norm(df['利润率']))

# 3. 绘制条形图
plt.figure(figsize=(10, 6))
bars = plt.bar(df['产品'], df['销售额'], color=bar_colors)

# 添加颜色条,明确颜色与利润率的对应关系
sm = cm.ScalarMappable(norm=norm, cmap=cmap)
sm.set_array([])
plt.colorbar(sm, label='利润率')

# 美化图表
plt.xlabel('产品')
plt.ylabel('销售额')
plt.title('销售额条形图(颜色越深代表利润率越高)')
plt.tick_params(axis='both', labelsize=10)
plt.show()

二、区间颜色划分(按利润区间设置固定颜色)

这种方式将利润划分为离散区间,用固定颜色区分,适合快速识别高/中/低利润组:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from matplotlib.patches import Patch

# 1. 准备示例数据
data = {
    '产品': ['产品A', '产品B', '产品C', '产品D', '产品E'],
    '销售额': [12000, 9500, 15000, 8000, 11000],
    '利润率': [85, 62, 92, 20, 45]
}
df = pd.DataFrame(data)

# 2. 根据利润区间分配颜色
# 定义区间规则:>=75绿色,25~74.99黄色,<25红色
bar_colors = np.where(
    df['利润率'] >= 75, 
    '#2ecc71',  # 深绿色
    np.where(
        df['利润率'] >=25, 
        '#f1c40f',  # 黄色
        '#e74c3c'   # 红色
    )
)

# 3. 绘制条形图
plt.figure(figsize=(10, 6))
bars = plt.bar(df['产品'], df['销售额'], color=bar_colors)

# 添加自定义图例,说明颜色对应的利润区间
legend_elements = [
    Patch(facecolor='#2ecc71', label='利润率 75-100'),
    Patch(facecolor='#f1c40f', label='利润率 25-74.99'),
    Patch(facecolor='#e74c3c', label='利润率 <25')
]
plt.legend(handles=legend_elements, loc='upper right')

# 美化图表
plt.xlabel('产品')
plt.ylabel('销售额')
plt.title('销售额条形图(按利润区间区分颜色)')
plt.tick_params(axis='both', labelsize=10)
plt.show()

注意事项

  • 如果你的数据是CSV/Excel格式,可使用pd.read_csv()或pd.read_excel()直接读取,替换示例中的模拟数据即可。
  • 渐变色系可根据需求替换,比如用Reds表示利润越高颜色越红,Blues表示利润越高颜色越蓝。
  • 区间阈值和颜色可根据业务需求自行调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:05:53