gpt4 book ai didi

python - matplotlib 选择错误的字体样式/粗细

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:28 30 4
gpt4 key购买 nike

我想将 matplotlib 绘图中使用的默认字体更改为 Windows 下的 Segoe UI。我可以通过像这样改变 rcParams 来做到这一点

import matplotlib
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['font.sans-serif'] = ['Segoe UI'] + matplotlib.rcParams['font.sans-serif']
matplotlib.rcParams['font.weight'] = 'normal'

这可行,但是字体的粗细似乎是错误的。使用以下代码,我可以确认 matplotlib 正在选择“Semibold”版本的字体,而不是我期望通过设置 matplotlib.rcParams['font.weight'] = 'normal' 得到的“Regular”变体.

from matplotlib.font_manager import findfont, FontProperties
font = findfont(FontProperties(family=['sans-serif']))
print font

>>> c:\windows\fonts\seguisb.ttf

如何强制 matplotlib 使用“常规”变体?这可以通过rcParams实现吗?

最佳答案

我想出了一个技巧,可以解决 Segoe UI 的问题,而无需每次都设置 kwargs...

出于某种原因,tf2font 模块(即 .pyd)将 400 的字体粗分割配给 Segoe UI Black、Ultralight、Light 和 Semi-bold 字体,而这些字体的字体粗细实际上应该为 1000、100,分别为 200 和 500。

首先删除你的 fontList.json 文件。(对我来说它位于 .matplotlib\fontList.json 中)。

然后,在 font_manager.py 中的这一行之前:

return FontEntry(font.fname, name, style, variant, weight, stretch, size) 

插入以下代码:

switch = lambda x: {
#Correct the font-weight for these fonts
'seguibl.ttf': 1000,
'segouisl.ttf': 100,
'seguisb.ttf':500,
'segoeuil.ttf':200
}[x]

f = os.path.split(font.fname)[1]
if f in ['seguibl.ttf', 'segouisl.ttf', 'seguisb.ttf', 'segoeuil.ttf']:
weight = switch(f)

最终结果如下:

switch = lambda x: {
#Correct the font-weight for these fonts
'seguibl.ttf': 1000,
'segouisl.ttf': 100,
'seguisb.ttf':500,
'segoeuil.ttf':200
}[x]

f = os.path.split(font.fname)[1]
if f in ['seguibl.ttf', 'segouisl.ttf', 'seguisb.ttf', 'segoeuil.ttf']:
weight = switch(f)
return FontEntry(font.fname, name, style, variant, weight, stretch, size)

关于python - matplotlib 选择错误的字体样式/粗细,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39855124/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com