最立竿见影的美化参数是字体、线条粗细、坐标轴刻度和图例位置;需设置中文字体优先、linewidth=2、plt.rcparams['axes.unicode_minus']=false及手动调整legend位置与savefig的dpi=300和bbox_inches='tight'。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

Matplotlib 默认图太丑,改哪几个参数最立竿见影
不是所有美化都要重写绘图逻辑。真正影响第一眼观感的,就那三四个参数:字体、线条粗细、坐标轴刻度、图例位置。中文乱码、标签挤成一团、线细得看不见——基本都出在这儿。
实操建议:
-
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans']:必须把中文字体放第一位,否则plt.title('损失曲线')会显示方块 -
plt.rcParams['axes.unicode_minus'] = False:不加这句,负号会变成短横线(−),数学符号全错位 - 画线时显式指定
linewidth=2和markersize=4,默认值在高分屏上几乎不可见 -
plt.legend(loc='upper right', frameon=True, fancybox=False, shadow=False):关掉花哨边框,避免和背景色打架
保存图片模糊 / 导出后文字发虚
不是分辨率低,是没告诉 Matplotlib 你要高清输出。plt.savefig() 默认用 100dpi,打印或嵌入论文直接糊成一片。
实操建议:
- 务必加
dpi=300参数:plt.savefig('loss.png', dpi=300, bbox_inches='tight') -
bbox_inches='tight'必须带,不然标题或图例被截掉是常态 - 别用
.png投期刊,改用.pdf或.eps:plt.savefig('loss.pdf', bbox_inches='tight'),矢量图放大不丢细节 - 如果导出 PDF 后中文字体消失,说明系统没注册字体,得提前用
matplotlib.font_manager.FontProperties加载本地 .ttf 文件
多子图排版错乱、间距重叠
plt.subplot() 和 plt.subplots() 看似简单,但默认 hspace 和 wspace 在数据量大时根本不够用,尤其加了 colorbar 或长标题之后。
实操建议:
- 别依赖
plt.tight_layout(),它经常失效。改用plt.subplots_adjust(hspace=0.4, wspace=0.3)手动控距 - 子图数量多时,优先用
fig, axes = plt.subplots(2, 3, figsize=(10, 6)),比一堆plt.subplot()更易统一设置 - 每个子图单独调字号:
axes[0, 0].tick_params(labelsize=9),全局rcParams对子图刻度无效 - colorbar 宽度难控制?加
cbar = plt.colorbar(im, ax=ax, shrink=0.8, aspect=20),shrink比fraction更稳
科研场景下配色撞车、色盲不友好
默认的 'tab10' 颜色集在灰度打印或色觉障碍者眼里,蓝/紫/绿三色几乎无法区分。不是审美问题,是可读性硬伤。
实操建议:
- 换配色方案:
plt.cm.viridis(连续)或plt.cm.Set2(离散),二者都通过色盲模拟测试 - 别用
color='r'这类单字母缩写,写全名如color='#1f77b4'(Matplotlib 默认蓝),方便后期统一替换 - 画折线图时,颜色 + 线型 + 标记三者必须至少有两个差异,例如:
linestyle='--', marker='s', color='#ff7f0e' - 导出前用在线工具(如 Coblis)上传 PDF 预览色盲模式效果,比凭感觉靠谱得多
配色和字体看着是“锦上添花”,但实际是图表能否被正确解读的门槛。很多人卡在导出模糊或中文不显示,就停在这一步——其实只差两行 rcParams 设置。










