python matplotlib需要注意的坑

记录Matplotlib绘图的注意事项。当plt有subplot时,数据格式需按要求,应为0 - 1浮点数或0 - 255整数,否则图片无法正确显示。另外,plt的imshow能处理范围外图片,可将超出范围的数据转化后正确显示。

仅是临时记录一下,避免忘记

当plt有subplot时,注意数据格式要按要求,要么是0-1的浮点数,要么是0-255的整数,若sbuplot有两幅图时,一副是0-255符合规范的整数,另一幅是0.0-255.0不符合规范的浮点数,则不合符规范的图片不能正确显示

此外,plt的imshow能正确处理范围外的图片,例如若范围超出了255,那么plt内部能够进行转化并显示出转换后正确范围的图片。

<think> 我们正在解决Matplotlib显示中文的问题。根据引用资料,有几种常见方法: 1. 设置字体为系统支持的中文字体(如SimHei, Microsoft YaHei等) 2. 同时设置正常显示负号(因为设置中文字体后负号可能显示异常) 3. 如果上述方法不行,可能需要检查Matplotlib的字体缓存或手动添加字体 我们将按照以下步骤进行说明: 步骤1:直接在代码中设置中文字体 步骤2:避免负号显示为方块 步骤3:检查系统可用字体(当上述方法无效时) 注意:不同操作系统可用字体可能不同,以下以Windows和Linux常见情况为例。 </think> ### Matplotlib显示中文问题的解决方案 Matplotlib默认使用英文字体库,导致中文字符显示为方块(□)。以下是四种可靠解决方案,按实施难度排序: --- #### **方法1:全局字体覆盖(推荐)** 在代码中强制指定中文字体,适用于Windows/Linux/macOS: ```python import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定黑体(Windows)或 ['WenQuanYi Micro Hei'](Linux) plt.rcParams['axes.unicode_minus'] = False # 修复负号显示异常[^4] ``` **适用场景**:快速修复,兼容性强 **效果验证**: ```python plt.title("正启函数数图") # 正常显示中文标题 plt.show() ``` --- #### **方法2:动态加载系统字体** 精确匹配系统已安装的中文字体(推荐跨平台使用): ```python from matplotlib.font_manager import FontProperties font = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf') # Windows路径 # Linux示例:fname='/usr/share/fonts/wenquanyi/wqy-microhei.ttc' plt.title("正启函数数图", fontproperties=font) # 按元素单独指定 ``` **优势**:精准控制特定文本的字体 **字体路径查询命令**: ```python # 打印Matplotlib可识别的所有字体 print([f.name for f in matplotlib.font_manager.fontManager.ttflist]) ``` --- #### **方法3:字体缓存重建(深度修复)** 当字体异常缓存导致方法失效时: 1. 删除缓存文件: ```python import matplotlib as mpl print(mpl.get_cachedir()) # 输出缓存目录位置 ``` 2. 手动删除该目录所有文件 3. 重启Python内核并重新导入matplotlib --- #### **方法4:自定义字体安装** 若系统无中文字体(如Docker环境): 1. 下载字体文件(如[思源黑体](https://github.com/adobe-fonts/source-han-sans)) 2. 复制到Matplotlib字体目录: ```python import matplotlib as mpl print(mpl.get_data_path() + '/fonts/ttf/') # 目标路径 ``` 3. 执行缓存清理(见方法3) --- ### 效果对比 | 方法 | 代码修改量 | 系统依赖 | 持久性 | |---------|------------|----------|--------------| | 全局覆盖 | ★☆☆☆☆ | 无 | 每次运行有效 | | 动态加载 | ★★★☆☆ | 需字体路径 | 永久有效 | | 缓存重建 | ★★☆☆☆ | 无 | 永久有效 | | 字体安装 | ★★★★★ | 需权限 | 永久有效 | > **避提示**:MacOS需使用`['Arial Unicode MS']`字体,且需关闭Matplotlib的缓存`plt.rcParams['font.family'] = 'Arial Unicode MS'` --- ### 相关问题 1. 如何让Matplotlib同时显示中文和日文字符? 2. Seaborn绘图时中文显示异常的解决方法? 3. 如何在Jupyter Notebook中永久配置Matplotlib中文字体? 4. Matplotlib导出PDF时中文丢失如何修复? [^1]: 解决方法一通过指定`Microsoft YaHei`字体覆盖默认设置。 [^2]: 配置`WenQuanYi Micro Hei`是Linux系统的常用方案。 [^3]: 字体缓存问题可通过`FontManager().ttflist`检测可用字体。 [^4]: `axes.unicode_minus=False`用于修正负号显示异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值