matplotlib绘图中文乱码问题

简介: matplotlib绘图中文乱码问题

在用matplotlib进行绘图时,如果在绘制过程中会用到中文,则默认情况下会出现字体警告:

UserWarning: Glyph 36724 (\N{CJK UNIFIED IDEOGRAPH-8F74}) missing from current font.

警告信息中提示“missing from current font”,直译就是“在当前字体中缺少(中文字符)”,大概含义就是默认的字体中不含中文字符。

同时中文字符显示为方框或乱码的形式,如下图。

对应代码

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 3 * np.pi, 50)
y = np.sin(x)
设置线宽
plt.figure(figsize=(10,4))
plt.plot(x, y, linewidth=4,label=u'正弦函数 sin')
plt.legend()
设置图表标题,并给坐标轴添加标签
plt.title("sin函数图", fontsize=12)
plt.xlabel("x轴", fontsize=12)
plt.ylabel("y轴", fontsize=12)
plt.grid(True, linestyle='-', alpha=0.5)
设置坐标轴刻度标记的大小
plt.tick_params(axis='both', labelsize=12)
for a, b in zip(x, y):
plt.text(a, b, b, ha='center', va='bottom', fontsize=10)
plt.show()

对于上面这类问题,核心就是设置绘制图片时的字体参数包含全部的需要用到的字符。

在绘图代码中设置全局字体

macSimHei(黑体)字体,大家可以下载安装该字体或者修改为系统自带的字体如Arial Unicode MS。

rcParams方法

在前面增加下面代码。

from pylab import mpl
设置显示中文字体,
设置font.sans-serif 或 font.family 均可
mpl.rcParams["font.sans-serif"] = ["Arial Unicode MS"] ## mac
plt.rcParams['font.family']=['Arial Unicode MS'] ## mac
mpl.rcParams["font.sans-serif"] = ["SimHei"] ## win
plt.rcParams['font.family']=['SimHei'] ## win
设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

font.family的默认是font.sans-serif,所以上面两个设置都可以。

rc方法

rc方法,其实和设置rcParams 基本等效

# 设置font字典为 SimSun(宋体),大小为12(默认为10)
font = {'family' : 'SimSun',
        'size'  : '12'}
设置 字体
plt.rc('font', **font)
解决中文字体下坐标轴负数的负号显示问题
plt.rc('axes', unicode_minus=False)

局部设置

这里我们演示加载自己的字体文件,设置指定的字体。

比如:

思源黑体是 Adobe 与 Google 推出的一款开源字体。

官网:https://source.typekit.com/source-han-serif/cn/

GitHub 地址:https://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese

我这里用的是 SourceHanSansSC-Bold.otf

演示代码

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
myfont = matplotlib.font_manager.FontProperties(fname=r"SourceHanSansSC-Bold.otf", size=14)
x = np.linspace(0, 3 * np.pi, 50)
y = np.sin(x)
设置线宽
plt.figure(figsize=(10,4))
plt.plot(x, y, linewidth=4,label=u'正弦函数 sin')
plt.legend()
设置图表标题,并给坐标轴添加标签
plt.title("sin函数图",  fontproperties = myfont)
plt.xlabel("x轴", fontproperties = myfont)
plt.ylabel("y轴", fontproperties = myfont)
plt.grid(True, linestyle='-', alpha=0.5)
设置坐标轴刻度标记的大小
plt.tick_params(axis='both', labelsize=12)
for a, b in zip(x, y):
plt.text(a, b, b, ha='center', va='bottom', fontsize=10)
plt.show()

执行效果

注意,我们看到plt.plot(这个函数没法设置字体的参数,我们无法通过上述方式设置标签对应的字体。

总结

matplotlib 中使用的字体来源于三个途径:

  1. matplotlib 自带的字体;
  2. 操作系统自带字体;
  3. 用户提供的第三方字体。

我们可以通过全局设置和局部设置来控制。

相关文章
|
25天前
|
Python
Matplotlib 绘图标记
Matplotlib 绘图标记
29 2
|
3月前
|
Python
Matplotlib 教程 之 Matplotlib 绘图标记 9
在本教程中,我们将探讨如何使用 Matplotlib 的 `plot()` 方法中的 `marker` 参数来自定义图表标记。您可以选择不同的线类型(如实线 `'-'`、虚线 `':'` 等),以及颜色类型(如红色 `'r'`、绿色 `'g'` 等)。同时,通过调整 `markersize (ms)`、`markerfacecolor (mfc)` 和 `markeredgecolor (mec)` 参数,可以定制标记的大小和颜色。
34 1
|
3月前
|
Python
Matplotlib 教程 之 Matplotlib 绘图标记 3
这段Matplotlib教程展示了如何通过`plot()`方法的`marker`参数来自定义图表标记,为数据点添加独特的视觉风格。例如,通过设置`marker = '*'`,可以使每个数据点显示为星形标记。这在需要对坐标轴进行特殊标注时尤为有用。下面的示例代码生成了一个带有星形标记的简单折线图。
41 2
|
3月前
|
搜索推荐 数据可视化 Python
Matplotlib 教程 之 Matplotlib 绘图标记 4
本教程介绍如何使用 Matplotlib 的 `plot()` 方法中的 `marker` 参数来自定义图表标记,使你的数据可视化更加直观和个性化。通过实例演示了如何设置下箭头作为数据点标记。
26 1
|
3月前
|
Python
Matplotlib 教程 之 Matplotlib 绘图标记 8
在 Matplotlib 中,可以通过 `plot()` 方法的 `marker` 参数自定义图表标记。此外,还可以设置线类型(如 `'-'` 实线、`':'` 虚线等)和颜色(如 `'r'` 红色、`'g'` 绿色等)。使用 `markersize` (`ms`) 定义大小,`markerfacecolor` (`mfc`) 和 `markeredgecolor` (`mec`) 分别定义标记的内部和边框颜色。
37 0
|
3月前
|
数据可视化 Python
Matplotlib 教程 之 Matplotlib 绘图标记 6
在本教程中,我们将探讨如何利用 Matplotlib 的 `plot()` 方法中的 `marker` 参数来自定义图表标记,以增强数据可视化效果。此外,还介绍了线类型(如实线 `'-'`、虚线 `':'` 等)、颜色类型(如红色 `'r'`、绿色 `'g'` 等)以及如何通过 `markersize` (`ms`)、`markerfacecolor` (`mfc`) 和 `markeredgecolor` (`mec`) 来调整标记的大小和颜色。通过一个示例展示了如何设置标记大小。
35 0
|
3月前
|
Python
Matplotlib 教程 之 Matplotlib 绘图标记 5
使用 Matplotlib 的 `plot()` 方法通过 `marker` 参数来自定义图表标记,同时解释了如何利用 `fmt` 参数定义标记、线条样式及颜色,例如 'o:r' 分别表示实心圆标记、虚线及红色。并通过一个实例演示了其使用方法。
30 0
|
3月前
|
数据可视化 数据处理 Python
Matplotlib:Python绘图利器之王
Matplotlib:Python绘图利器之王
25 0
|
3月前
|
Python
Matplotlib 教程 之 Matplotlib 绘图标记 2
在 Matplotlib 中使用 `plot()` 方法的 `marker` 参数来自定义图表标记。通过不同符号如 `"o"`(实心圆)、`"v"`(下三角)等,可实现多样化的标记效果。示例展示了实心圆标记的使用方法,提供了多种标记符号供选择,包括几何形状和特殊符号。
68 0
|
4月前
|
Python
​16个matplotlib绘图实用小技巧
​16个matplotlib绘图实用小技巧