python中文乱码-ValueError: Key axes.unicode_minus: Could not convert “flase“ to bool错误的解决方法

博主在尝试解决matplotlib中文乱码时遇到ValueError,发现是配置文件中'axes.unicode_minus'参数的False拼写错误。改正后,中文显示正常,不再需要执行_rebuild()。同时,分享了代码示例展示正确设置后中文图表的绘制。尽管在尝试_rebuild时遇到ImportError,但问题已解决,推测可能是matplotlib或Python版本更新导致的字体缓存机制变化。

一、背景

本人按照下面的参考链接中的永久解决乱码问题对应的方法一步步地执行时,出现了错误【ValueError: Key axes.unicode_minus: Could not convert "flase" to bool】

matplotlib中文乱码的两种解决方案 - 云+社区 - 腾讯云

二、解决方法

在百度搜索无果后,我突然意识到Flase是什么鬼单词?正确的拼写不应该是False吗?再回过头去看大牛写的文章,发现他写的是False,他并没错,是matplotlib的开发者出错了。

于是我把那个配置文件中的该选项改成了False之后,就直接运行下面的代码。

# -*- coding:utf-8 -*-


import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

# 消除中文乱码问题,注意中文字符串前加u,比如u'爱的信仰'
# mpl.rcParams['font.sans-serif'] = ["SimHei"]
# mpl.rcParams['axes.unicode_minus'] = False

font_style = dict(fontsize=18, weight="black")
# First create sample data
x = np.linspace(0, 2 * np.pi, 500)
y = np.sin(x) * np.exp(-x)
# Create just a figure and only one subplot
fig, ax = plt.subplots(1, 2, sharey=True)
# subpiot(121)
ax1 = ax[0]
ax1.plot(x, y, "k--", lw=2)
ax1.set_title('折线图')
ax1.grid(ls=":", lw=1, color="gray", alpha=0.8)
# subplot(122)
ax2 = ax[1]
ax2.scatter(x, y, s=10, c="skyblue", marker="o")
ax2.set_title("散点图")
# Create a figure title
plt.suptitle("创建一张画布和两个子区的绘图模式", **font_style)
#  Show figure and subplot(s)
plt.show()

在我的font文件夹下存在SimHei.ttf字体文件的时候,它的绘图是正确的。

 三、回顾

其实我当时没有改正这个错误之前,按照大牛的意见执行下面的rebuild代码时,出现了错误。

from matplotlib.font_manager import _rebuild
_rebuild() #reload一下

# ImportError: cannot import name '_rebuild' from 'matplotlib.font_manager'

之后我才突然意识到Flase关键词的错误,改正拼写错误后,我再执行上面的rebuild代码,还是会出现导入异常。

不管了,已经可以显示中文了,还rebuild个屁(开玩笑hhhh)。 

不过我猜测可能是因为matplotlib版本变化(本人版本为3.5.1),或者python(本人版本3.8)版本变化,导致每一次run文件的时候都会重新缓存字体,就不需要执行rebuild代码了。

因为我在font_manager文件和官方文档中都没有发现rebuilt模块。

当然了,如果有大牛知道这个导入异常的真实原因和解决方案,不妨评论区分享出来!!!重谢!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值