确定问题:
在使用matplotlib绘图时,可能会遇到类似以下的报错:
findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.
这个错误通常表示matplotlib无法找到所需的字体包,从而默认使用“DejaVu Sans”字体。
解决问题:
- 安装所需的字体包
在错误信息中提到的字体包为“sans-serif”,实际上就是喜欢使用无衬线字体的一组字体。matplotlib默认使用的是该组字体中的“DejaVu Sans”字体,因此我们可以通过安装完整的“sans-serif”字体包来解决问题。
具体步骤如下:
- 执行以下命令:
sudo apt-get install fonts-liberation
或者执行以下命令:
sudo apt-get install fonts-noto
这两个命令分别安装了Google团队发布的Liberation字体和Noto Sans字体,都包含了“sans-serif”字体组中的字体。根据情况选择其中一个即可。
- 设置matplotlib字体
如果你不想安装完整的“sans-serif”字体包,或者安装后仍然遇到问题,这里提供另一种解决方法:手动设置matplotlib绘图时所使用的字体。
具体步骤如下:
- 导入matplotlib库和rcParams:
```python
import matplotlib.pyplot as plt
import matplotlib
# 获取rcParams
rcParams = matplotlib.rcParams
```
- 设置字体
设置字体需要修改rcParams中的“font.family”参数。如果要使用其他字体,请将“serif”、“sans-serif”、“cursive”和“fantasy”中的一个或多个赋值为该字体,使用逗号隔开。在这里,我们将“sans-serif”字体设置为“Liberation Sans”。
python
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Liberation Sans']
- 绘图
完成了字体设置后,就可以绘制图形,测试字体是否正常显示了。
python
plt.plot([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
plt.xlabel('x')
plt.ylabel('y')
plt.title('测试标题')
plt.show()
示例一:
我们使用以下代码进行测试:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
plt.xlabel('x')
plt.ylabel('y')
plt.title('测试标题')
plt.show()
得到以下报错信息:
findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.
这是因为 matplotlib 默认使用了“sans-serif”字体组中的“DejaVu Sans”字体,但是该字体在本机上未安装,因此出现了报错。
为了解决这个问题,我们可以通过安装一个包含“sans-serif”字体组中字体的字体包(如 liberation-fonts)或手动设置字体来解决问题。
示例二:
假设我们想手动设置字体,我们可以使用以下代码进行测试:
import matplotlib.pyplot as plt
import matplotlib
rcParams = matplotlib.rcParams
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Liberation Sans']
plt.plot([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
plt.xlabel('x')
plt.ylabel('y')
plt.title('测试标题')
plt.show()
在这个例子中,我们首先导入了matplotlib
库和rcParams
变量,然后手动设置字体参数,将“sans-serif”字体组设置为“Liberation Sans”。最后绘制了一个简单的图形,该图形用我们设置的字体呈现了标签和标题。这证明了我们的字体设置是有效的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:matplotlib之Font family [‘sans-serif‘] not found的问题解决 - Python技术站