在 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" 按钮)
-
方法 2:使用 Kaggle Notebook 自带的 Noto Sans CJKimport 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 # 解决负号问题
-
找到字体路径
运行以下代码,查找
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()