Python中如何在X轴绘制多个布尔列展示各营销活动接受情况
营销活动接受率可视化实现方案
核心逻辑:AcceptedCmp系列列为0/1编码,直接计算列均值即可得到各活动的客户接受率,排序后绘制差异化高亮的条形图,可快速识别接受度最高、最低的活动。
- 第一步:依赖导入与数据统计
import pandas as pd import matplotlib.pyplot as plt # 解决中文乱码(无需可删除) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 提取所有营销活动响应列 cmp_cols = [col for col in df3.columns if col.startswith('AcceptedCmp')] # 计算接受率(转百分比,按降序排列) accept_rate = df3[cmp_cols].mean().mul(100).sort_values(ascending=False)
- 第二步:绘制高亮极值的条形图
# 配色规则:最高接受率用深绿、最低用浅红,其余用浅灰 colors = ['#2E8B57' if idx == 0 else '#CD5C5C' if idx == len(accept_rate)-1 else '#D3D3D3' for idx in range(len(accept_rate))] ax = accept_rate.plot(kind='bar', color=colors, figsize=(8, 5), edgecolor='white') # 给每个条形添加百分比标签 for p in ax.patches: h = p.get_height() ax.annotate(f'{h:.1f}%', (p.get_x() + p.get_width()/2, h), ha='center', va='bottom') # 图表样式调整 plt.title('各营销活动客户接受率对比', fontsize=14, pad=20) plt.xlabel('营销活动编号', fontsize=12) plt.ylabel('接受客户占比(%)', fontsize=12) plt.xticks(rotation=0) plt.ylim(0, accept_rate.max() * 1.2) plt.tight_layout() plt.show()
- 输出效果说明:
- 所有活动按接受率自动从高到低排序
- 接受度最高、最低的活动会被专属颜色高亮,无需手动对比
- 每个条形上方直接标注精确百分比,无需对照坐标轴读数
内容的提问来源于stack exchange,提问作者Yilmaz
相关产品推荐
相关产品推荐

