Matplotlib找不到字体,打印乱码

# 使文字可以展示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 使负号可以展示
plt.rcParams['axes.unicode_minus'] = False

前提是得安装对应字体

可以再windows环境找到字体文件

C:\Windows\Fonts

windwos

复制到Matplotlib字体路径内

data/app/miniconda3/envs/py_test38/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/

可以通过如下代码查看当前支持的字体

import matplotlib.pyplot as plt
from matplotlib import font_manager
for font in font_manager.fontManager.ttflist:
    # 查看字体名以及对应的字体文件名
    print(font.name, '-', font.fname)

修改

vi /data/app/miniconda3/envs/py_test38/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

放开这两行注释 并在可用列表中增加 SimHei 中文字体

font.family:  sans-serif

font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

删除缓存文件

rm ~/.cache/matplotlib/fontlist-v330.json

重启python

### 解决 Matplotlib 显示中文乱码的方法 为了使 Matplotlib 正确显示中文字符,可以采取多种方式来调整字体设置。以下是几种常见且有效的解决方案: #### 方法一:修改 `plt.rcParams` 设置 通过更改全局参数配置中的无衬线字体为支持中文的字体,能够有效解决大部分情况下的中文乱码问题。 ```python import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['Noto Sans CJK JP'] ``` 这种方法简单易行,在大多数情况下都能很好地工作[^1]。 #### 方法二:指定本地 TTF 文件路径 如果希望使用特定的中文字体文件,则可以通过加载自定义TTF文件的方式来实现这一点。 ```python import matplotlib as mpl font_path = '/path/to/chinese_font_file.ttf' mpl.font_manager.fontManager.addfont(font_path) mpl.rc('font', family='SimHei') ``` 这种方式允许更灵活的选择不同风格的字体,并确保所选字体确实存在于环境中[^5]。 #### 方法三:编辑 Matplotlib 配置文件 对于需要长期稳定使用的环境来说,直接修改 Matplotlib 的配置文件可能是更好的选择。这涉及到定位并编辑位于安装目录下的 `matplotlibrc` 文件。 到该文件的位置: ```python import matplotlib print(matplotlib.matplotlib_fname()) ``` 接着打开此文件并将其中有关字体的部分改为适合处理中文的内容,比如将 `font.family` 和 `font.sans-serif` 设定为你想要使用的中文字体名称[^3]。 #### 方法四:测试多个可用字体 有时不确定哪种字体最适合当前平台或项目需求时,可以通过循环展示不同的字体效果来进行比较挑选。 ```python import matplotlib.pyplot as plt import numpy as np fonts = [ 'Kaiti SC', 'Hiragino Sans GB', 'Songti SC', 'Heiti TC', 'PingFang HK', 'Arial Unicode MS' ] for i, font in enumerate(fonts): plt.subplot(len(fonts), 1, i + 1) plt.text( 0.5, 0.5, f'示例文本 - {font}', fontsize=20, ha='center', va='center', fontfamily=font ) plt.axis('off') plt.tight_layout() plt.show() ``` 上述代码可以帮助快速预览各种可能适用的字体选项,从而做出最佳决策[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值