You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Colab中为Seaborn图表设置自定义Emoji字体

解决Seaborn表情符号显示异常问题

问题背景

研究巴西Twitter表情符号使用情况,已提取数据生成如下DataFrame:

index,emojis
🚨,75
🤣,66
🇧🇷,55
😂,35
🚩,32
👏,25
👇,18
🤔,18
👏🏻,17
❤,15

使用Seaborn绘制柱状图时,默认字体无法显示全部表情符号,绘制代码:

sns.barplot(x = data.index, y="emojis",data=data)

之前尝试的问题分析

  1. 第一种方法报错:执行命令时出现mv: cannot stat 'font_file.ttf': No such file or directory,原因是:
    • 下载的是zip压缩包,未先解压就尝试移动不存在的font_file.ttf
    • 解压后实际字体文件名是NotoColorEmoji-Regular.ttf,不是font_file.ttf
  2. 第二种方法未生效:直接将zip包下载到Matplotlib字体目录,未解压导致Matplotlib无法识别;且全局字体设置后可能未触发字体缓存重建,或者未针对轴标签单独指定字体。

可行解决方案

方案一:系统级安装字体(适用于Colab和本地)

Colab执行命令:
# 下载并重命名字体压缩包
!wget "https://fonts.google.com/download?family=Noto%20Color%20Emoji" -O noto_emoji.zip
# 解压压缩包
!unzip noto_emoji.zip
# 将字体文件移动到系统字体目录
!mv NotoColorEmoji-Regular.ttf /usr/share/fonts/truetype/
# 更新系统字体缓存
!fc-cache -f -v
Python绘图代码:
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import seaborn as sns
import pandas as pd

# 重建Matplotlib字体缓存
fm._rebuild()

# 读取数据
data = pd.DataFrame({
    'emojis': [75,66,55,35,32,25,18,18,17,15]
}, index=['🚨','🤣','🇧🇷','😂','🚩','👏','👇','🤔','👏🏻','❤'])

# 设置全局字体为Noto Color Emoji
plt.rcParams['font.family'] = 'Noto Color Emoji'

# 绘制图表
sns.barplot(x=data.index, y="emojis", data=data)
plt.show()

方案二:直接加载字体文件(无需系统安装,灵活通用)

无需将字体安装到系统,直接加载本地字体文件,适用于本地VS Code和Colab:

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import seaborn as sns
import pandas as pd
import os

# Colab环境下自动下载字体(本地环境可跳过,直接指定本地字体路径)
if not os.path.exists('NotoColorEmoji-Regular.ttf'):
    !wget "https://fonts.google.com/download?family=Noto%20Color%20Emoji" -O noto_emoji.zip
    !unzip noto_emoji.zip
    !rm noto_emoji.zip  # 清理压缩包

# 加载字体文件
font_path = './NotoColorEmoji-Regular.ttf'  # 本地环境替换为实际路径
emoji_font = fm.FontProperties(fname=font_path)

# 读取数据
data = pd.DataFrame({
    'emojis': [75,66,55,35,32,25,18,18,17,15]
}, index=['🚨','🤣','🇧🇷','😂','🚩','👏','👇','🤔','👏🏻','❤'])

# 绘制图表并指定x轴标签字体
ax = sns.barplot(x=data.index, y="emojis", data=data)
ax.set_xticklabels(ax.get_xticklabels(), fontproperties=emoji_font)
plt.show()

本地VS Code额外说明

本地环境无需使用!wget,直接从Google Fonts下载Noto Color Emoji压缩包,解压得到NotoColorEmoji-Regular.ttf,然后将font_path替换为该文件的本地绝对路径即可。也可将字体安装到系统,之后直接通过family='Noto Color Emoji'调用。

内容的提问来源于stack exchange,提问作者gutatu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:21:05