Seaborn中使用自定义TTF字体报错‘Roboto未找到’求助(无sudo权限)
解决无sudo权限下Seaborn使用自定义TTF字体的问题
问题根源
你遇到的Font family 'Roboto' not found警告,是因为未通过系统安装字体时,Matplotlib的字体缓存未更新,无法识别Roboto家族名。以下是几种无需系统安装字体的可行方案:
方案一:直接在绘图元素中指定FontProperties
绕开字体家族名查找,直接将自定义字体的FontProperties对象传给需要设置字体的绘图元素:
from matplotlib import font_manager import seaborn as sns import matplotlib.pyplot as plt # 加载自定义字体 path = "path/to/Roboto-Black.ttf" roboto_black = font_manager.FontProperties(fname=path) # 基础绘图 tips = sns.load_dataset("tips") ax = sns.boxplot(x="day", y="total_bill", data=tips) # 为各类文本元素指定字体 ax.set_xlabel("Day", fontproperties=roboto_black) ax.set_ylabel("Total Bill", fontproperties=roboto_black) ax.tick_params(axis='both', fontproperties=roboto_black) ax.set_title("Total Bill by Day", fontproperties=roboto_black) plt.show()
方案二:更新Matplotlib字体缓存并设置家族名
强制刷新Matplotlib的字体缓存,让其识别新增的自定义字体,再通过家族名全局设置:
from matplotlib import font_manager, matplotlib import seaborn as sns import matplotlib.pyplot as plt # 清理旧字体缓存,强制重新加载 matplotlib.font_manager._load_fontmanager(try_read_cache=False) # 添加字体到FontManager path = "path/to/Roboto-Black.ttf" fm = font_manager.FontManager() fm.addfont(path) # 获取并使用字体家族名 font_family = font_manager.FontProperties(fname=path).get_name() sns.set(font=font_family) # 测试绘图 tips = sns.load_dataset("tips") sns.boxplot(x="day", y="total_bill", data=tips) plt.title("Total Bill by Day") plt.show()
方案三:通过Matplotlib rcParams全局指定字体
直接修改Matplotlib的配置参数,强制使用自定义字体,无需依赖家族名:
from matplotlib import font_manager, rcParams import seaborn as sns import matplotlib.pyplot as plt path = "path/to/Roboto-Black.ttf" roboto_black = font_manager.FontProperties(fname=path) # 全局覆盖字体配置 rcParams['font.family'] = [roboto_black.get_name()] rcParams['font.sans-serif'] = [roboto_black.get_name()] sns.set() # 绘图测试 tips = sns.load_dataset("tips") sns.boxplot(x="day", y="total_bill", data=tips) plt.show()
内容的提问来源于stack exchange,提问作者Priyatham
相关产品推荐
相关产品推荐

