一、开篇导语
前几期我们学会了用 Matplotlib 画线、加标记、改颜色。但一张"裸奔"的图表——没有标题、没有轴标签——就像一份没有署名的报告,别人根本看不懂你想表达什么。
今天这期,我们来给图表"穿上衣服":添加标题(Title)和轴标签(Label),顺便解决困扰无数新手的中文乱码问题。
二、核心 API:三个必会方法
三、快速上手:基础示例
import numpy as npimport matplotlib.pyplot as pltx = np.array([1, 2, 3, 4])y = np.array([1, 4, 9, 16])plt.plot(x, y)# 添加轴标签和标题plt.xlabel("x - label") # X轴标签plt.ylabel("y - label") # Y轴标签plt.title("RUNOOB TEST TITLE") # 图表标题plt.show()
效果:图表上方出现标题,X轴下方和Y轴左侧分别显示标签。四、中文显示:新手必踩的坑
❌ 问题现象
如果你直接写中文,大概率会显示成方框乱码:
plt.title("菜鸟教程 - 测试") # 显示成 □□□□
✅ 解决方案:推荐全局配置(一劳永逸)
import matplotlib.pyplot as plt# 方法1:全局设置(推荐,一次配置,全图生效)plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'PingFang SC']plt.rcParams['axes.unicode_minus'] = False # 解决负号显示为方块的问题# 方法2:查看系统可用字体(按需选择)# from matplotlib import font_manager# print([f.name for f in font_manager.fontManager.ttflist])
💡 推荐字体:Windows 用 SimHei,Mac 用 PingFang SC 或 Arial Unicode MS,Linux 用 Noto Sans CJK SC。五、进阶美化:字体样式与定位
1. 自定义字体样式(fontdict)
import matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport numpy as npimport os# ================= 1. 字体加载(解决报错的核心) =================font_path = "simhei.ttf" # 确保你已经在当前目录上传了 simhei.ttfif not os.path.exists(font_path): font_path = "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc" # 备用系统字体prop = fm.FontProperties(fname=font_path)plt.rcParams['axes.unicode_minus'] = False # ================================================================x = np.arange(1, 11)y = 2 * x + 5# ================= 2. 定义样式字典(类似 CSS) =================# ️ 注意:为了配合 ** 解包,字典里的 'size' 必须改为 'fontsize'font_title = { 'color': 'blue', 'fontsize': 20, 'fontweight': 'bold', 'fontproperties': prop # 将字体属性注入字典}font_label = { 'color': 'darkred', 'fontsize': 14, 'fontproperties': prop # 将字体属性注入字典}# ================================================================# ================= 3. 使用 ** 解包字典传入参数 =================plt.title("2026年销售趋势分析", **font_title)plt.xlabel("月份", **font_label)plt.ylabel("销售额(万元)", **font_label)plt.plot(x, y, 'o-', color='#2E86AB', linewidth=2, markersize=8)plt.grid(True, alpha=0.3, linestyle='--')# 优化 X 轴刻度,防止数字重叠plt.xticks(x, fontsize=10)plt.tight_layout()plt.show()

2. 标题与标签的位置控制(loc 参数)
import matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport numpy as npimport os# ================= 1. 解决中文字体问题 =================font_path = "simhei.ttf"if not os.path.exists(font_path): font_path = "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc"prop = fm.FontProperties(fname=font_path)plt.rcParams['axes.unicode_minus'] = False # =======================================================# 生成一些演示数据x = np.linspace(0, 10, 50)y = np.sin(x) + np.random.normal(0, 0.1, 50)plt.figure(figsize=(10, 6))plt.scatter(x, y, color='#2E86AB', alpha=0.6, s=30)# ================= 2. 定义样式字典(包含对齐方式) =================# 标题:左对齐,并增加底部内边距 (pad) 防止压到图表font_title = { 'fontproperties': prop, 'fontsize': 18, 'fontweight': 'bold', 'loc': 'left', # 👈 左对齐 'pad': 20 # 👈 标题距离图表顶部的距离}# X轴标签:右对齐,并增加左侧内边距 (labelpad)font_xlabel = { 'fontproperties': prop, 'fontsize': 14, 'color': 'darkred', 'loc': 'right', # 👈 右对齐 'labelpad': 15 # 👈 标签距离X轴的垂直距离}# Y轴标签:顶部对齐,并取消默认旋转(让文字横排,配合 top 更美观)font_ylabel = { 'fontproperties': prop, 'fontsize': 14, 'color': 'darkgreen', 'loc': 'top', # 👈 顶部对齐 'labelpad': 15, # 👈 标签距离Y轴的水平距离 'rotation': 0 # 👈 让Y轴标签横着显示(默认是竖着的)}# =======================================================# ================= 3. 应用样式 =================plt.title("2026年用户活跃度散点分布 (左对齐)", **font_title)plt.xlabel("时间 (分钟) - 右对齐", **font_xlabel)plt.ylabel("活跃度指数 - 顶部对齐", **font_ylabel)# 添加网格和边框美化plt.grid(True, alpha=0.3, linestyle='--')ax = plt.gca()ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)plt.tight_layout()plt.show()

效果对比:
loc='left':标题靠左,适合长标题
loc='right':标题靠右,适合副标题风格
轴标签定位:X轴可左/中/右,Y轴可下/中/上
六、实战:一张专业级图表的诞生
import matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport numpy as npimport os# ========== 步骤1:全局配置(替换为绝对安全的局部字体加载) ==========font_path = "simhei.ttf"if not os.path.exists(font_path): font_path = "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc"prop = fm.FontProperties(fname=font_path)plt.rcParams['axes.unicode_minus'] = False # 仅保留负号设置# ====================================================================# ========== 步骤2:准备数据 ==========months = ['1月', '2月', '3月', '4月', '5月', '6月']sales = [120, 135, 148, 162, 155, 178]# ========== 步骤3:绘制图表 ==========fig, ax = plt.subplots(figsize=(10, 6))ax.plot(months, sales, marker='o', markersize=10, markerfacecolor='white', markeredgecolor='#E74C3C', color='#2E86AB', linewidth=2.5)# ========== 步骤4:添加标题和标签(重点!) ==========# 注意:所有包含中文的地方都加上了 fontproperties=propax.set_title('2026年上半年销售额趋势', fontsize=18, fontweight='bold', color='#2C3E50', pad=20, fontproperties=prop)ax.set_xlabel('月份', fontsize=13, color='#555', labelpad=10, fontproperties=prop)ax.set_ylabel('销售额(万元)', fontsize=13, color='#555', labelpad=10, fontproperties=prop)# 🌟 关键补充:单独设置 X 轴刻度标签的字体(防止月份变成方块)ax.set_xticks(range(len(months)))ax.set_xticklabels(months, fontproperties=prop, fontsize=12)# ========== 步骤5:数值标注 ==========for i, v in enumerate(sales): ax.text(i, v + 4, f'{v}万', ha='center', fontsize=11, color='#E74C3C', fontproperties=prop)# ========== 步骤6:美化细节 ==========ax.grid(True, alpha=0.3, linestyle='--')ax.set_ylim(100, 200)ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)plt.tight_layout()plt.show()
效果:标题醒目、轴标签清晰、中文完美显示、整体风格现代简洁。七、参数速查表
八、今日练习
基础题:绘制一条折线图,添加标题"Python学习进度"和轴标签"天数"/"掌握程度"
进阶题:将标题设为左对齐、蓝色、粗体;X轴标签设为靠右、红色
挑战题:解决中文乱码后,绘制一张包含中文的完整数据可视化图表
九、总结
今天我们掌握了图表的"文字系统":
✅ plt.title() —— 图表标题,支持位置、颜色、粗细控制
✅ plt.xlabel() / plt.ylabel() —— 轴标签,让数据有"身份"
✅ 中文乱码 —— rcParams 全局配置,一劳永逸
✅ fontdict + loc —— 精细控制字体样式和位置
记住:一张好图表 = 清晰的数据 + 醒目的标题 + 明确的标签。三者缺一不可。
🎯 今日金句:代码绘制的是数据的形状,而标题和标签赋予它灵魂。没有文字的图表,只是漂亮的噪音。