如何在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)
之前尝试的问题分析
- 第一种方法报错:执行命令时出现
mv: cannot stat 'font_file.ttf': No such file or directory,原因是:- 下载的是zip压缩包,未先解压就尝试移动不存在的
font_file.ttf - 解压后实际字体文件名是
NotoColorEmoji-Regular.ttf,不是font_file.ttf
- 下载的是zip压缩包,未先解压就尝试移动不存在的
- 第二种方法未生效:直接将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
相关产品推荐
相关产品推荐

