“matplotlib”中对字体设置的奇怪响应

2024-10-08 16:45:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的系统(OSX10.9.1)上安装了各种字体,并且能够在我的所有工具和应用程序(包括LaTeX安装)中毫无问题地使用它们,但是我试图在matplotlib(使用text.usetex=False)中指定一个特定的字体会产生意想不到的和令人困惑的结果。在

例如

font = {'family': 'sans-serif', 
        'sans-serif': ['Open Sans', 'Avenir', 'sans-serif']}
plt.rc('font', **font)

结果既没有使用opensans也没有使用Avenir,尽管指定了一个大小(例如,'size': 20)会按预期更改大小。在

奇怪的是,指定一个权重不仅会改变权重,还会导致字体发生变化。例如

^{pr2}$

似乎导致了使用opensan(但看起来像是额外加粗而不是加粗)。如果我把重量设置为550或更大,我会得到相同的效果;而任何一个较小的结果都会导致错误的字体。我在其他字体(例如。。Sika或Gill Sans),不管字体是OT、TT,还是作为系统字体或用户字体,都可以看到这一点。在

为什么matplotlib以这种奇怪的方式响应。我是否应该更改matplotlib(或Python)设置或配置选项以确保获得预期的行为?也许还有其他方法可以指定字体的粗细吗?在


FWIW,下面是Open Sans在我的字体安装中的外观:

enter image description here

所有这些都可以由Python按预期(在/Users/Rax/Library/Fonts/)找到

import matplotlib.font_manager
print matplotlib.font_manager.findSystemFonts(fontpaths=None)

以及

font_manager.FontProperties(fname='/Users/Rax/Library/Fonts/OpenSans-ExtraBold.ttf').get_name()
font_manager.FontProperties(fname='/Users/Rax/Library/Fonts/OpenSans-Regular.ttf').get_name()

正如预期的那样,这两种字体都将“Open Sans”报告为字体名称

font_manager.FontProperties(fname='/Users/Rax/Library/Fonts/OpenSans-Regular.ttf').get_weight()

报告“正常”。在


Tags: matplotliblibrary字体fontsmanageropenfnameusers
1条回答
网友
1楼 · 发布于 2024-10-08 16:45:11

如果您还没有,您可能需要设置一个^{} file,看看这些设置是否有效。把它放在~/.matplotlib/matplotlibrc中,它将在启动时自动读取。我还没有为字体定制我的字体,但当我改变了它的一些其他设置(特别是图像DPI)时,我用pylab重新启动IPython时,它被选中了,所以希望它能为您工作。在

相关问题 更多 >

    热门问题