使用matplotlib画图中文显示乱码问题

cannot import name _rebuild from matplotlib.font_manager

使用matplotlib画图中文显示乱码问题

  • 第一步执行以下命令获取matplotlibrc文件路径
import matplotlib
print(matplotlib.get_data_path())  # 数据路径

在这里插入图片描述

  • 下载SimHei.ttf(也可以到官网下载,但是速度很慢)

    • 百度云地址

    ​ 链接:https://pan.baidu.com/s/1ISu44F5TPAjgLy7cxzz7Fg
    ​ 提取码:digl

    • 夸克网盘地址
      链接:https://pan.quark.cn/s/bfb5f46500d1
      提取码:v7df
  • 将SimHei.ttf复制到前面获取到的mpl-data下的fonts\tff路径下

在这里插入图片描述

  • 修改matplotlibrc内容

    可以使用ctrl+f搜索关键字找到需要修改的行

    font.family:  sans-serif
    font.sans-serif: SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
    axes.unicode_minus: False
    

    注意需要去掉前面的#!!!

在这里插入图片描述
在这里插入图片描述

  • 重新加载matplotlib

    • 方法一
    from matplotlib.font_manager import _rebuild
    _rebuild()
    

    该方法可能还是会报错,如下图所示,则采用方法二

    在这里插入图片描述

    • 方法二
    import shutil
    import matplotlib
    
    shutil.rmtree(matplotlib.get_cachedir())
    

    我是用的方法的语句解决问题的。

    参考文章:http://t.csdn.cn/7no5A

### Colab 中 Matplotlib 中文乱码解决方案 在 Google Colab 上使用 Matplotlib 绘制图表时,如果涉及中文字符可能会遇到乱码问题。这是因为默认情况下,Matplotlib 并未配置支持中文字体的环境。以下是解决该问题的具体方法: #### 方法一:安装并设置中文字体 可以通过下载中文字体文件(如 SimHei 或 Noto Sans CJK),将其加载到 Matplotlib 的字体管理器中。 ```python import matplotlib.pyplot as plt from matplotlib import font_manager # 下载并解压中文字体 (Noto Sans CJK SC) !wget -q https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKsc-Regular.otf font_path = 'NotoSansCJKsc-Regular.otf' # 将字体添加至 Matplotlib 字体管理器 font_prop = font_manager.FontProperties(fname=font_path) # 设置全局字体属性 plt.rcParams['font.family'] = font_prop.get_name() plt.rcParams['axes.unicode_minus'] = False # 解决负号显示异常的问题 # 测试绘图功能 plt.figure(figsize=(6, 4)) plt.plot([1, 2, 3], [4, 5, 6]) plt.title('测试标题', fontproperties=font_prop) # 使用指定字体绘制标题 plt.xlabel('X轴标签') # 默认会应用全局字体设置 plt.ylabel('Y轴标签') plt.show() ``` 此方法通过引入外部字体解决了中文乱码问题[^1]。 --- #### 方法二:在线调用 Google Fonts 提供的中文字体 Google Fonts 提供了许多开源字体资源,可以直接在网络环境中动态加载这些字体来解决问题。 ```python import matplotlib.pyplot as plt from matplotlib import rcParams # 动态加载 Google Fonts 的 Noto Sans 中文字体 !apt-get update && apt-get install -y fonts-noto-cjk rcParams['font.sans-serif'] = ['Noto Sans CJK SC'] rcParams['axes.unicode_minus'] = False # 避免负号显示错误 # 测试绘图功能 plt.figure(figsize=(6, 4)) plt.plot([1, 2, 3], [4, 5, 6]) plt.title('测试标题') plt.xlabel('X轴标签') plt.ylabel('Y轴标签') plt.show() ``` 这种方法利用了系统级别的字体库更新机制,在线获取所需的中文字体[^1]。 --- #### 方法三:本地上传自定义字体 对于某些特殊需求场景,可以手动准备所需字体文件并通过 Google Drive 或其他方式上传到 Colab 运行环境中。 ```python from google.colab import files uploaded = files.upload() # 手动上传字体文件(如 simhei.ttf) import os import matplotlib.font_manager as fm # 获取上传后的字体路径 font_files = fm.findSystemFonts(fontpaths=None) custom_font_path = list(uploaded.keys())[0] # 注册新字体 fm.fontManager.addfont(custom_font_path) plt.rc('font', family='SimHei') # 测试绘图功能 plt.figure(figsize=(6, 4)) plt.plot([1, 2, 3], [4, 5, 6]) plt.title('测试标题') plt.xlabel('X轴标签') plt.ylabel('Y轴标签') plt.show() ``` 这种方式适合于需要特定风格字体的情况,灵活性较高[^1]。 --- 以上三种方法均可有效解决 Colab 环境下 Matplotlib中文乱码问题。具体选择取决于实际应用场景以及个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值