
Matplotlib 是 Python 中最经典、最广泛使用的二维绘图库虽本身定位为“基础绘图引擎”而非专用于统计美化的高级库但通过其高度可定制的 API结合科学计算生态如 NumPy、Pandas可实现专业级的统计可视化与美化效果。常用统计美化技巧包括✅ 常用统计图表类型直方图plt.hist() KDE 曲线sns.kdeplot或scipy.stats.gaussian_kde箱线图plt.boxplot()/sns.boxplot()与小提琴图sns.violinplot()散点图 回归拟合线sns.regplot()或np.polyfitplt.plot热力图sns.heatmap()常配合corr()展示相关性分布图sns.displot()、sns.jointplot() 美化关键手段纯 matplotlib设置样式plt.style.use(seaborn-v0_8)或plt.style.use(ggplot)自定义颜色使用cmap如viridis,coolwarm或color参数支持 HEX、RGB 元组、命名色字体与标签plt.rcParams.update({font.sans-serif: [SimHei, DejaVu Sans]})解决中文乱码plt.title(),plt.xlabel(),plt.ylabel()配合fontsize,fontweight网格与布局ax.grid(True, alpha0.3)plt.tight_layout()或fig.subplots_adjust()图例与注释plt.legend()、ax.annotate()添加统计信息如均值、p值 进阶建议与 Seaborn基于 matplotlib 封装或 Plotly交互式协同使用提升统计表达效率使用matplotlib.pyplot.rc_context()实现局部样式控制利用mpl_toolkits.axes_grid1或sns.despine()去除冗余边框增强简洁性。importmatplotlib.pyplotaspltimportnumpyasnp# 示例美化直方图 KDEnp.random.seed(42)datanp.random.normal(0,1,1000)fig,axplt.subplots(figsize(6,4))n,bins,patchesax.hist(data,bins30,densityTrue,alpha0.7,colorsteelblue,labelHistogram)# KDE 曲线kdenp.exp(-0.5*bins**2)/np.sqrt(2*np.pi)# 标准正态核近似ax.plot(bins,kde,r-,linewidth2,labelKDE (N(0,1)))ax.set_xlabel(Value,fontsize12)ax.set_ylabel(Density,fontsize12)ax.set_title(Beautiful Histogram with KDE,fontsize14,fontweightbold)ax.legend()ax.grid(True,alpha0.3)plt.tight_layout()plt.show()在 matplotlib 中正确显示中文标题和坐标轴标签关键在于解决字体缺失与编码问题。默认情况下matplotlib 使用的字体如 DejaVu Sans不支持中文会导致方块□或乱码。以下是完整、可靠、跨平台Windows/macOS/Linux的解决方案✅ 推荐方法推荐优先级1 → 2 → 3✅ 方法1全局设置中文字体推荐一劳永逸importmatplotlib.pyplotaspltimportmatplotlib# 方式1a指定系统已安装的中文字体如微软雅黑、SimHei、Noto Sans CJK SC等plt.rcParams[font.sans-serif][Microsoft YaHei,SimHei,Noto Sans CJK SC,WenQuanYi Zen Hei,DejaVu Sans]plt.rcParams[axes.unicode_minus]False# 解决负号−显示为方块的问题# 方式1b或直接设置字体路径更精准适用于自定义字体# import matplotlib.font_manager as fm# zh_font fm.FontProperties(fname/System/Library/Fonts/PingFang.ttc) # macOS# plt.rcParams[font.family] sans-serif# plt.rcParams[font.sans-serif] [zh_font.get_name()]✅ 方法2临时上下文设置适合单图/局部控制withplt.rc_context({font.sans-serif:[SimHei,DejaVu Sans]}):plt.figure(figsize(6,4))plt.plot([1,2,3],[1,4,2])plt.title(中文标题)plt.xlabel(横坐标)plt.ylabel(纵坐标)plt.show()✅ 方法3为每个文本元素单独指定 FontProperties最灵活兼容性最强frommatplotlib.font_managerimportFontProperties fontFontProperties(fname/path/to/your/chinese_font.ttf)# 如 SimHei.ttf 或 NotoSansCJKsc-Regular.otfplt.title(中文标题,fontpropertiesfont,fontsize14)plt.xlabel(横坐标,fontpropertiesfont)plt.ylabel(纵坐标,fontpropertiesfont)plt.xticks(fontpropertiesfont)plt.yticks(fontpropertiesfont) 验证当前可用中文字体调试用importmatplotlib.font_managerasfm fonts[f.nameforfinfm.fontManager.ttflist]print(sorted(set(fonts)))# 查看所有已识别字体名# 常见中文字体名示例SimHei, Microsoft YaHei, Noto Sans CJK SC, AR PL UKai CN⚠️ 注意事项plt.rcParams[axes.unicode_minus] False必须设置否则负号“−”会显示为方块Linux 系统可能需先安装中文字体如sudo apt install fonts-wqy-zenheiJupyter 中若仍不生效可尝试重启内核 清除缓存~/.matplotlib/fontlist-v330.json可删除后重生成。✅ 一行验证是否成功plt.text(0.5,0.5,测试中文✓,fontsize16,hacenter)plt.axis(off)plt.show()