在 Kaggle 中绘制中文乱码解决

在 Kaggle 中绘制中文时,需要设置 Matplotlib 的字体,否则中文会显示为乱码。可以使用 SimHei(黑体)或 Microsoft YaHei(微软雅黑)。

解决方案

  • 使用 matplotlib 设置中文字体
  • 在 Kaggle 安装 SimHei 字体
  • 方法1:手动上传 SimHei.ttf

    如果你一定要用 SimHei(黑体),可以按照以下步骤操作:

    步骤 1:下载 SimHei 字体

  • 在本地下载 SimHei.ttf
    👉 SimHei.ttf(可从 Windows 电脑 C:\Windows\Fonts\simhei.ttf 获取)
  • 上传到 Kaggle Notebook(点击左侧 "Upload" 按钮)
  • import matplotlib.pyplot as plt
    import matplotlib
    
    # 设置字体路径(Kaggle 上传真实目录,根据需要自己改)
    font_path = "/kaggle/input/simhei.ttf"
    
    # 加载字体
    from matplotlib import font_manager
    my_font = font_manager.FontProperties(fname=font_path)
    
    # 应用字体
    plt.rcParams['font.sans-serif'] = my_font.get_name()
    plt.rcParams['axes.unicode_minus'] = False  # 解决负号问题
    
    方法 2:使用 Kaggle Notebook 自带的 Noto Sans CJK
  • 找到字体路径

    运行以下代码,查找 Noto Sans CJK 字体的具体路径:

    import matplotlib.font_manager as fm
    
    # 列出所有可用字体
    for font in fm.findSystemFonts():
        if "NotoSansCJK" in font:
            print(font)
    

    Kaggle 上的 matplotlib 可能默认不识别中文,即使已安装 Noto Sans CJK,你需要手动加载字体并在 legend,xlable,ylabel,title 里指定 prop=my_font。以下是示例的完整代码:

    import matplotlib.pyplot as plt
    import matplotlib.font_manager as fm
    import seaborn as sns
    
    # 1. 安装字体(如果未安装)
    !apt-get update
    !apt-get install -y fonts-noto-cjk
    
    # 2. 查找并加载 Noto Sans CJK 字体
    font_path = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"  # 可能路径
    my_font = fm.FontProperties(fname=font_path)
    
    # 3. 定义模型名称和 F1-score
    models = ["逻辑回归", "SVM", "随机森林", "BERT"]
    f1_scores = [89.6, 89.3, 79.1, 95.0]  # 百分比形式
    
    # 4. 设置 Matplotlib 字体
    plt.rcParams["font.family"] = my_font.get_name()  # 让 Matplotlib 识别中文
    plt.rcParams["axes.unicode_minus"] = False  # 解决负号问题
    
    # 5. 绘制条形图
    plt.figure(figsize=(8, 5))
    bars = plt.bar(models, f1_scores, color=['gray', 'gray', 'gray', 'black'])
    
    # 6. 添加数据标签
    for bar, score in zip(bars, f1_scores):
        plt.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 0.5,
                 f"{score}%", ha='center', fontsize=12, fontweight='bold', fontproperties=my_font)
    
    # 7. 添加标题和标签
    plt.xlabel("模型", fontsize=14, fontproperties=my_font)
    plt.ylabel("F1-score (%)", fontsize=14, fontproperties=my_font)
    plt.title("不同模型的 F1-score 对比", fontsize=16, fontproperties=my_font)
    
    # 8. 图例(防止乱码)
    plt.legend(["模型性能"], prop=my_font)
    
    # 9. 设置 y 轴范围
    plt.ylim(70, 100)
    
    # 10. 显示图像
    plt.show()
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值