当前位置: 首页 > news >正文

0101安装matplotlib_numpy_pandas-报错-python

文章目录

    • 1 前言
    • 2 报错
      • 报错1:ModuleNotFoundError: No module named 'distutils'
      • 报错2:ERROR:root:code for hash blake2b was not found.
      • 报错3:**`ModuleNotFoundError: No module named '_tkinter'`**
      • 报错4:UserWarning: Glyph 39044 (\N{CJK UNIFIED IDEOGRAPH-9884}) missing from font(s) DejaVu Sans.
        • 方法 1:安装支持 CJK(中日韩)的字体
          • 步骤 1:安装思源黑体(Noto Sans CJK)
          • 步骤 2:清理 Matplotlib 字体缓存
        • 方法 2:代码中指定中文字体
        • 方法 3:修改 Matplotlib 配置文件
          • 步骤 1:查找配置文件路径
          • 步骤 2:编辑配置文件
        • 验证是否生效
      • 错误5 AttributeError: 'FigureCanvasInterAgg' object has no attribute 'tostring_rgb'. Did you mean: 'tostring_argb'?
    • 结语

1 前言

最近在学习人工智能-机器学习入门,想通过python解决下线性回归问题。本人电脑为macos m1 pro,使用homebrew管理包依赖,

安装pyenv管理python版本,python版本3.12.x,openssl@1.1和python@3共存。

2 报错

报错1:ModuleNotFoundError: No module named ‘distutils’

产生过程:安装matplotlib报错ModuleNotFoundError: No module named ‘distutils’

原因分析:Python 3.12+ 移除了 distutils:官方不再维护此模块,改用 setuptools 替代

解决方案:

# 强制升级 setuptools 和 pip
pip install --upgrade --force-reinstall setuptools pip

报错2:ERROR:root:code for hash blake2b was not found.

产生过程:运行如下代码

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model

# read_csv里面的参数是csv在你电脑上的路径,此处csv文件放在notebook运行目录下面的CCPP目录里
data = pd.read_csv('./ccpp.csv')
data.head()

原因分析:

  1. 此错误通常表示当前 Python 环境中缺少 blake2b 哈希算法的支持,OpenSSL 依赖缺失或版本过低(需要 OpenSSL 1.1.1 或更高版本)。

解决方案:通过homebrew 卸载低版本openssl,升级最新版本openssl ,重新编译安装python

brew uninstall --ignore-dependencies openssl@1.1
brew install openssl
pyenv uninstall 3.12
pyenv install 3.12
pyenv global 3.12.9

报错3:ModuleNotFoundError: No module named '_tkinter'

  • 产生过程:编译安装python的时候报错

  • 产生原因:此错误表示 Python 环境中缺少 Tkinter 模块的支持,通常是因为在编译 Python 时未正确安装 Tcl/Tk 开发库

  • 解决方案:安装依赖,重新编译安装python

    brew install tcl-tk
    

最后环境配置正常如下图:

在这里插入图片描述

报错4:UserWarning: Glyph 39044 (\N{CJK UNIFIED IDEOGRAPH-9884}) missing from font(s) DejaVu Sans.

在 macOS M1 Pro 上使用 Matplotlib 绘图时,如果遇到 UserWarning: Glyph XXXX missing from font(s) DejaVu Sans 警告,通常是因为 Matplotlib 默认字体 DejaVu Sans 不支持某些 Unicode 字符(如中文、日文、韩文字符)。


方法 1:安装支持 CJK(中日韩)的字体
步骤 1:安装思源黑体(Noto Sans CJK)

推荐安装 Google 的 Noto Sans CJK 字体,它覆盖了大部分 Unicode 字符:

bash

复制

# 通过 Homebrew 安装(需提前安装 Homebrew)
brew install font-noto-sans-cjk font-noto-sans-cjk-sc

# 或者手动下载并安装:
# 从官网下载:https://www.google.com/get/noto/
# 解压后双击 .ttf 文件,点击 "安装"。
步骤 2:清理 Matplotlib 字体缓存

Matplotlib 会缓存字体列表,安装新字体后需删除缓存:

bash

复制

# 查找缓存路径
python -c "import matplotlib; print(matplotlib.get_cachedir())"

# 输出类似:/Users/username/.matplotlib
# 删除该目录下的 fontlist-* 文件
rm -rf /Users/username/.matplotlib/fontlist-*

方法 2:代码中指定中文字体

在 Python 代码中直接指定使用已安装的中文字体(如 Noto Sans CJK):

python

复制

import matplotlib.pyplot as plt
import numpy as np

# 设置 Matplotlib 使用支持中文的字体
plt.rcParams['font.sans-serif'] = ['Noto Sans CJK JP']  # 根据字体名称调整
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 示例:绘制带中文标签的图表
plt.plot(np.random.rand(10))
plt.title('示例图表')  # 中文标题
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()

方法 3:修改 Matplotlib 配置文件
步骤 1:查找配置文件路径

bash

复制

python -c "import matplotlib; print(matplotlib.matplotlib_fname())"
# 输出类似:/Users/username/.virtualenvs/venv/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc
步骤 2:编辑配置文件

找到以下两行并修改:

bash

复制

# 去掉注释并设置字体
font.family : sans-serif
font.sans-serif : Noto Sans CJK JP, DejaVu Sans, Arial  # 添加 Noto Sans CJK 到字体列表开头

验证是否生效

运行以下代码检查是否支持中文:

python

复制

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['Noto Sans CJK JP']
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('测试中文')
plt.show()

如果图表标题正常显示中文,则问题解决。

错误5 AttributeError: ‘FigureCanvasInterAgg’ object has no attribute ‘tostring_rgb’. Did you mean: ‘tostring_argb’?

解决方案,更换matplotlib后端

matplotlib.use('TkAgg') 

效果如下图所示:

在这里插入图片描述

结语

❓QQ:806797785

⭐️仓库地址:https://gitee.com/gaogzhen

⭐️仓库地址:https://github.com/gaogzhen

[1]deepseek[CP/OL].

[2]用scikit-learn和pandas学习线性回归[CP/OL].

http://www.dtcms.com/a/113269.html

相关文章:

  • Business English Certificates (BEC) 高频词汇学习
  • 将MATLAB神经网络数据转换为C/C++进行推理计算
  • Linux网络状态监控利器:netstat与ping命令详解
  • Java的Selenium的特殊元素操作与定位之select下拉框
  • RocketMQ初认识
  • C,C++语言缓冲区溢出的产生和预防
  • 【2012】【论文笔记】太赫兹波在非磁化等离子体——
  • 【国产突围!致远电子ZXDoc如何打破Vector垄断,成为新能源车研发“神器”?】
  • Xshell Plus 6下载与安装
  • 【机器学习】机器学习工程实战-第4章 特征工程
  • LabVIEW商业软件开发注意问题
  • C语言-基础语法学习
  • 【Linux系统】linux下的软件管理
  • 大数据技术发展与应用趋势分析
  • `use_tempaddr` 和 `temp_valid_lft ` 和 `temp_prefered_lft ` 笔记250405
  • web性能检测工具lighthouse
  • k8s 1.23升级1.24
  • JavaSE基础——第六章 类与对象(二)
  • 使用dockerbuildx在x86机器上构建arm版docker镜像
  • 神经网络基础
  • 嵌入式AI简介
  • java面向对象 - 封装、继承和多态
  • 浅谈ai - Activation Checkpointing - 时间换空间
  • HANA如何在存储过程里执行动态SQL
  • 智慧节能双突破 强力巨彩谷亚VK系列刷新LED屏使用体验
  • 初识Linux-基本常用指令(一篇学会操作指令)
  • 03.unity开发资源 获取
  • 05.unity 游戏开发-3D工程的创建及使用方式和区别
  • Windows程序中计时器WM_TIMER消息的使用
  • Golang的Goroutine(协程)与runtime