乐于分享
好东西不私藏

第2课:学会3步把Excel“默认丑图”变成“高管特供版”

第2课:学会3步把Excel“默认丑图”变成“高管特供版”

导读上节课我们解决了环境配置和中文乱码,画出了第一张图。但很多学员发现:“图是能看了,但还是透着一股‘学生气’,不够专业。

今天,第二课《Matplotlib基础:告别“丑默认”,绘制汇报级折线与柱状图》,我们将直接拆解“高颜值”图表的基因:配色、布局、细节。不用学美术,照抄代码模板,让你的图表瞬间拥有“咨询顾问”范儿!

💡 为什么你的图表看起来“很廉价”?

你是否遇到过这种情况:

❌ 颜色刺眼:默认的蓝红绿配色,像90年代的网页设计。
❌ 元素拥挤:坐标轴刻度挤在一起,图例挡住数据,让人眼花缭乱。
❌ 重点模糊:老板一眼看过去,不知道你想强调哪个数据点。
❌ 缺乏标注:只有线条和柱子,没有具体数值,老板还得眯着眼去猜。

职场真相:在汇报中,“清晰”比“复杂”重要,“美观”即“专业”

一张好的汇报图表,应该像杂志插图一样:配色高级、重点突出、数据一目了然。

今天,我们就用 Matplotlib 这把“手术刀”,对默认图表进行一场“整容手术”。


 第一部分:审美升级——三大“去土味”法则

在写代码之前,先记住这三个让图表变高级的核心法则(无需数学基础):

1️⃣ 拒绝“彩虹色”,拥抱“莫兰迪/商务色”

默认的红蓝绿对比度太高,显得廉价。

✅ 商务深蓝系:适合严肃汇报,稳重可信。
✅ 莫兰迪色系:低饱和度,高级感强,适合长期趋势展示。
✅ 单色渐变:同一颜色的深浅变化,逻辑清晰不杂乱。

💡 独家福利:文末附带一套“职场万能配色代码库”,复制即用!

2️⃣ 做减法:少即是多 (Less is More)

  • 去掉多余的边框(Spines)。
  • 弱化网格线(Grid),只留辅助参考,不要喧宾夺主。
  • 精简图例,能直接标在图上就不要放在角落里。

3️⃣ 数据标签化:让数字自己说话

老板没时间盯着坐标轴去读数。

✅ 直接在柱子/折点上方标注数值
✅ 关键转折点用箭头或文字特别注明

 第二部分:实战演练——打造“汇报级”折线图

场景:你需要向总监汇报《2026年第一季度各部门营收趋势》。

目标画出一张线条平滑、重点突出、带有数据标签的专业折线图

📝 代码实操

import matplotlib.pyplot as pltimport numpy as np# --- 0. 基础配置 (复用第一课的乱码解决代码) ---plt.rcParams['font.sans-serif'] = ['SimHei''Microsoft YaHei'plt.rcParams['axes.unicode_minus'] = False# --- 1. 准备数据 ---months = ['1月''2月''3月']dept_a = [120135150# 销售部dept_b = [8095110# 市场部# --- 2. 创建画布与配色 (核心:自定义高级色) ---# 定义配色方案:商务蓝 + 活力橙 (避免默认红蓝)color_main = '#2E86C1'# 沉稳蓝color_sub = '#F39C12'# 警示/次要橙fig, ax = plt.subplots(figsize=(106), dpi=100# dpi设置高一点,更清晰# --- 3. 绘制折线 (核心:增加标记点和线宽) ---# 销售部:主线,加粗,带圆点标记ax.plot(months, dept_a, marker='o', linewidth=2.5, color=color_main, label='销售部', markersize=8)# 市场部:次线,稍细,带方块标记ax.plot(months, dept_b, marker='s', linewidth=2, color=color_sub, label='市场部', markersize=8)# --- 4. 添加数据标签 (核心:让数据会说话) ---# 封装一个简单函数来自动标注数值defadd_labels(x, y, color):for i, v in enumerate(y):        ax.text(i, v + 2, str(v), ha='center', va='bottom', fontsize=11, color=color, fontweight='bold')add_labels(months, dept_a, color_main)add_labels(months, dept_b, color_sub)# --- 5. 美化细节 (核心:去边框、调网格) ---# 设置标题和坐标轴ax.set_title('2026年Q1 核心部门营收趋势对比', fontsize=16, pad=20, fontweight='bold')ax.set_xlabel('月份', fontsize=12)ax.set_ylabel('营收金额 (万元)', fontsize=12)# 优化网格:只保留Y轴虚线,颜色变淡ax.grid(axis='y', linestyle='--', alpha=0.3)# 去除顶部和右侧的边框 (让图表更透气)ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)# 调整图例位置ax.legend(loc='upper left', frameon=False, fontsize=12# frameon=False 去掉图例背景框# --- 6. 输出 ---plt.tight_layout() # 自动调整布局,防止标签被切plt.show()

🖼️ 效果解析

运行后,你将看到一张截然不同的图表:

✨ 配色专业:不再是刺眼的红蓝,而是沉稳的商务蓝与活力的橙色搭配。
✨ 重点突出:线条加粗,关键点有标记,数值直接标在点上方,老板一眼就能看到“150”和“110”。
✨ 界面清爽:去掉了多余的上下边框,网格线若隐若现,不干扰视线。

📊 第三部分:进阶实战——绘制“带值”的双柱状图

场景:年终汇报,需要对比《今年 vs 去年》各季度的业绩。

痛点:默认柱状图柱子太细、颜色太俗、没有具体数值。

📝 代码实操

import matplotlib.pyplot as pltimport numpy as np# --- 0. 基础配置 ---plt.rcParams['font.sans-serif'] = ['SimHei''Microsoft YaHei'plt.rcParams['axes.unicode_minus'] = False# --- 1. 准备数据 ---quarters = ['Q1''Q2''Q3''Q4']last_year = [200240220300]this_year = [230260280350]x = np.arange(len(quarters)) # 标签位置 [0, 1, 2, 3]width = 0.35# 柱子宽度# --- 2. 创建画布 ---fig, ax = plt.subplots(figsize=(106))# --- 3. 绘制双柱 (核心:错位排列) ---# 去年:灰色系 (作为陪衬)rects1 = ax.bar(x - width/2, last_year, width, label='2025年', color='#BDC3C7', edgecolor='none')# 今年:主色调 (作为重点)rects2 = ax.bar(x + width/2, this_year, width, label='2026年', color='#2E86C1', edgecolor='none')# --- 4. 添加数值标签 (核心:自动计算高度并标注) ---defautolabel(rects):for rect in rects:        height = rect.get_height()        ax.annotate(f'{int(height)}',                    xy=(rect.get_x() + rect.get_width() / 2, height),                    xytext=(03), # 垂直偏移3个点                    textcoords="offset points",                    ha='center', va='bottom', fontsize=10, fontweight='bold')autolabel(rects1)autolabel(rects2)# --- 5. 美化细节 ---ax.set_title('2025-2026 年度季度业绩对比', fontsize=16, pad=20, fontweight='bold')ax.set_xticks(x)ax.set_xticklabels(quarters, fontsize=12)ax.set_ylabel('业绩 (万元)', fontsize=12)# 添加一条明显的基准线 (可选)ax.axhline(0, color='black', linewidth=0.8# 底部基线ax.grid(axis='y', linestyle='--', alpha=0.2# 淡化网格# 去除多余边框ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)ax.spines['left'].set_visible(True# 保留左侧Y轴ax.legend(frameon=False, loc='upper left')plt.tight_layout()plt.show()

🖼️ 效果解析

运行后,你将看到一张截然不同的图表:

💡 关键技术点解析

  1. 错位排列 (x - width/2):这是画双柱图的关键,让两组柱子并排而不是重叠。
  2. 主次分明:去年的数据用浅灰色(#BDC3C7),今年的数据用亮蓝色,引导视觉聚焦在今年。
  3. autolabel函数:这是一个通用的“小工具”,自动读取柱子高度并在顶端写上数字,再也不用手动一个个敲了!
🎁 附录:职场万能配色代码库(建议收藏)

别再纠结选什么颜色了!直接把下面这些十六进制代码复制到你的 color= 参数里:


⚠️ 避坑指南:PyCharm 中的常见报错

1、报错:AttributeError: 'Axes' object has no attribute 'bar_label'
  • 原因:你使用的 Matplotlib 版本过低(<3.4)。
  • 解决:在 PyCharm 终端运行 
pip install --upgrade matplotlib 升级即可。或者使用文中提供的 autolabel 自定义函数(兼容性更好)。
2、图表里的字还是方框 □□□
  • 检查:确认代码最开头是否添加了 plt.rcParams 配置。
  • Mac用户:如果 SimHei 无效,请尝试改为 Arial Unicode MS 或 Heiti TC
3、柱子太细或太宽?
  • 调整:修改 width 参数(默认0.8,双柱图建议0.35-0.4)。


📝 小结 & 互动

💻 源代码已经帮你准备好了!

复制 → 粘贴 → 改几个参数,你就能一键生成老板一看就点头的专业报表。

别光收藏吃灰,今天就动手,把你最近那份 Excel 数据拿来“整容”,让它从路人甲变身汇报主角!

👇下期想学什么?评论区许愿,小居优先安排!

👍点赞证明你已通关,解锁“进阶地图”!

🔖 收藏这篇干货值得放进“防身术”文件夹,下次汇报前翻出来直接用!

➕ 关注跟着小居,下次老板要看图时,你就是办公室里唯一会“魔法”的人!