如何在matplotlib中更改图例字体名称

21
我想在 matplotlib 图表的图例中显示 Times New Roman 字体。我已经将所有其他刻度标签/轴标签/标题更改为 Times New Roman,并搜索了文档,但我只能找到如何使用 pyplot.legend() 中的 prop 参数更改图例中的字体大小。
当然,在发布后不久,我找到了答案。对于其他遇到相同问题的人,解决方案如下:
import matplotlib as mpl  
mpl.rc('font',family='Times New Roman')

6
欢迎来到StackOverflow! - dax
4个回答

22

这篇文章在谷歌搜索结果中没有显示,所以我要把它发布为答案。字体的rc参数可以用来设置单个默认字体。

针对和我有同样问题的其他人提供解决方案:

import matplotlib as mpl
mpl.rc('font',family='Times New Roman')

15

.rc解决方案会改变所有绘图的默认字体。

如果你只想更改特定图例(属于特定对象的图例)的字体属性,而不是更改所有字体,则可以使用以下解决方案:

L = ax.legend()
plt.setp(L.texts, family='Consolas')

这使您可以为图例和轴选择不同的字体。当我需要在图例中使用等宽字体而不是在轴上使用时,我发现这很有帮助--这样可以创建一个像这样整洁的图例:

图片描述

请注意标题与图例使用不同的字体 - 这使我能够实现数字对齐,否则将难以实现。


很好,除了Consolas似乎没有标准安装或不是字体系列。对我来说,'monospace'可行。 - Dima Lituiev
@DimaLituiev - Consolas是Mac上的标准等宽字体。我猜你用的是Windows机器?无论如何,这只是一个指南,而不是一份处方... - Floris
在我的Mac 10.10上,open -a /Applications/Font\ Book.app 显示了9种等宽字体,但只有 CourierCourier Newmonospace 可以在Matplotlib 2.2.3中使用。请参见font_manager - denis

11

我认为这是更好的方式。

import matplotlib.font_manager as fm

## your font directory 
font_path = '/Users/frhyme/Library/Fonts/BMDOHYEON_otf.otf'

## font_name 
font_name = fm.FontProperties(fname=font_path).get_name()

plt.legend(prop={'family':font_name, 'size':20})

0
这是一个来自2023年的例子。
plt.legend(
    labels,
    bbox_to_anchor=[1, 0, 0.5, 1],
    prop={'family':'monospace'}
)

prop={'family':'monospace'} - 更改图例字体
bbox_to_anchor=[1, 0, 0.5, 1] - 将图例移动到右上角


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接