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

