终极方案:解决matplotlib绘制图表中文字显示乱码的问题(别再看到“□□□”了!)

适用于 Windows、macOS、Linux 全平台,中文显示不再是方块!

📌 场景介绍

上篇文章里,带大家写了个简单的量化投资Python小脚本,

实现功能:

  • 自动识别股票是否连续上涨

  • 建议买入时机

  • 绘制清晰的价格变化趋势图

代码回顾:

用 Python 写个简单的量化投资策略-优快云博客

有粉丝私信我说图表中文显示成了方块“□□□”?

别慌,今天我们逐个击破,一口气把这些乱码通通打回原形!


🧨 遇到常见问题:

❌ 问题一:模块没安装

出现提示:

ModuleNotFoundError: No module named 'matplotlib'

✅ 解决方法:安装 matplotlib 库

如果你还没有安装 matplotlib

打开终端 / 命令行,输入:

pip install matplotlib

或在 Jupyter Notebook 中输入并运行:

!pip install matplotlib

❌ 问题二:中文乱码!?

如果你运行后发现标题标签显示成方框“口口口”或乱码,或者图表中文字显示不出来:

✅ 解决方法:手动设置中文字体

matplotlib 默认不支持中文字体,需要手动设置。

在画图脚本前加入这两行:

1)适用于Windows

plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体,适用于 Windows plt.rcParams['axes.unicode_minus'] = False # 避免负号显示为方块

2)如果你用的是 macOS,可尝试替换字体为:

plt.rcParams['font.sans-serif'] = ['Heiti SC']  # 或 'PingFang SC'

❌ 问题三:仍然中文乱码!?

图表中文仍然显示为方框(口口口),说明你的系统中根本没有这两种字体,或者 matplotlib 没识别到。

✅ 解决方法:找出你电脑已有的中文字体并指定(动态字体名法)

动态列出你系统中所有字体,挑一个确实存在的中文字体来用。

1️⃣ 步骤一:找出所有已安装字体

运行以下代码,列出你电脑上安装的所有字体名。

import matplotlib.font_manager as fm

for font in fm.findSystemFonts(fontpaths=None, fontext='ttf'):
    font_name = fm.FontProperties(fname=font).get_name()
    print(font_name)

请在输出中找一个明显支持中文的字体名,比如这些:

  • 思源黑体Noto Sans CJK SCSource Han Sans SC

  • 微软雅黑Microsoft YaHei

  • PingFang SC

  • 苹方

  • 仿宋宋体 等等


2️⃣ 步骤二:把找到的字体设置为中文字体

比如你发现有 Microsoft YaHei,就这样设置:

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

或者:

plt.rcParams['font.sans-serif'] = ['Noto Sans CJK SC']

然后加上这句避免负号乱码:

​​​​​​​plt.rcParams['axes.unicode_minus'] = False


 📓 示例完整代码(动态字体名法)
import matplotlib.pyplot as plt

# 设置字体(你替换为你系统里有的中文字体名)
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 举例
plt.rcParams['axes.unicode_minus'] = False

prices = [100, 101, 103, 102, 104, 106, 107]
days = list(range(1, len(prices) + 1))

plt.plot(days, prices, marker='o', label='股价')
plt.title("股票价格变化图")
plt.xlabel("日期")
plt.ylabel("价格(元)")
plt.grid(True)
plt.legend()
plt.show()

❌ 问题四:还是不行?

执行上述完整代码后,仍出现报错:

RuntimeError: Could not set the fontsize (invalid pixel size; error code 0x17)

说明你指定的字体文件或字体名称存在问题,比如:

  • 字体文件本身有问题(损坏或不支持)

  • matplotlib 解析时失败

  • 字体名不规范或不被系统识别

✅ 解决思路:

1️⃣ 步骤一:重置字体设置试试是否画图正常

先测试以下初始配置代码,完全不设置中文字体,看是否能画图(但可能中文仍是乱码):

import matplotlib.pyplot as plt

prices = [100, 101, 103, 102, 104, 106, 107]
days = list(range(1, len(prices) + 1))

plt.plot(days, prices, marker='o', label='股价')
plt.title("股票价格变化图")
plt.xlabel("日期")
plt.ylabel("价格(元)")
plt.grid(True)
plt.legend()
plt.show()

如果这段代码能正常弹出图,只是中文乱码,说明问题确实出在字体设置。


2️⃣ 步骤二:用本地字体路径直接指定字体文件(推荐做法) ​​​​​​​
📌 首先,找到你系统中字体文件路径
1)在 macOS 上:

查看路径:

/System/Library/Fonts//System/Library/Fonts/Supplemental/ 找字体,如 PingFang.ttc

或在终端输入:

ls /System/Library/Fonts/

你可能看到这些:

  • PingFang.ttc

  • AppleGothic.ttf

2)在 Windows 上:

查看路径:

C:\Windows\Fonts

拷贝某个字体文件的完整路径,例如:

C:\Windows\Fonts\simhei.ttf

📌 然后,写进代码里:
my_font = FontProperties(fname="C:/Windows/Fonts/simhei.ttf")

📓 示例完整代码
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties

# 手动加载字体文件(你要用自己电脑上实际存在的 .ttf 文件)
my_font = FontProperties(fname="/System/Library/Fonts/PingFang.ttc")  # macOS 举例

# 图表内容
prices = [100, 101, 103, 102, 104, 106, 107]
days = list(range(1, len(prices) + 1))

plt.plot(days, prices, marker='o', label='股价')
plt.title("股票价格变化图", fontproperties=my_font)
plt.xlabel("日期", fontproperties=my_font)
plt.ylabel("价格(元)", fontproperties=my_font)
plt.grid(True)
plt.legend(prop=my_font)
plt.show()

注释:

细心的小伙伴一定注意到新增了这一行代码:

from matplotlib.font_manager import FontProperties

它的作用是:是从 matplotlib 中导入 FontProperties 类,用它来加载和使用本地字体文件(.ttf 或 .ttc)。


🔍 如果不加这句会怎样?

如果你不导入 FontProperties,直接写这句:

my_font = FontProperties(fname="某某字体路径")

Python 就会提示:

NameError: name 'FontProperties' is not defined

因为你没有告诉 Python “FontProperties 是谁”。


📍 终极方案:换默认英文字体、不显示中文(下下策)

万一你是那个 0.01% 的“字体受害者”,上面的方法都不灵……

我也只能掏出压箱底的终极秘笈了——真的不想用这招,但它从没失手。

如果只是测试用途,不显示中文也可以这么写:

plt.title("Stock Trend")
plt.xlabel("Day")
plt.ylabel("Price (Yuan)")


✅ 效果图(示意):

图中会显示7个点的股价走向,横轴是“日期”,纵轴是“价格(元)”,曲线平滑、有标记点,标题和标签中文都能正确显示。


🧠 总结一句话:

用 Python + matplotlib 不仅可以进行基础的数据判断(例如判断买入机会),还可以高质量地绘制趋势图,只要你搞定中文字体的问题,就能做出专业感十足的图表!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值