Matplotlib rcParams无法识别“ Times New Roman”(mac High Sierra)

时间:2018-10-05 21:24:40

标签: python matplotlib fonts

我正在尝试将matplotlib图的字体设置为Times New Roman。我尝试过:

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Times New Roman'

我相信这是设置字体的正确方法,但是我不断收到找不到找到的错误:

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/font_manager.py:1238: UserWarning: findfont: Font family ['Times New Roman'] not found. Falling back to DejaVu Sans.

搜索后,我确认我已经下载了字体。我尝试打开python shell并自己检查rcParams的内容。在许多其他字体参数中,我奇怪地发现font.serif中包含Times New Roman的字体列表。

          'font.serif': ['DejaVu Serif',
                         'Bitstream Vera Serif',
                         'Computer Modern Roman',
                         'New Century Schoolbook',
                         'Century Schoolbook L',
                         'Utopia',
                         'ITC Bookman',
                         'Bookman',
                         'Nimbus Roman No9 L',
                         'Times New Roman',
                         'Times',
                         'Palatino',
                         'Charter',
                         'serif'],

但是,font.family仅包含一项:sans-serif,当matplotlib documentation statesfont.family中应有五个值时。有人遇到过这个错误吗?您是如何解决的?

1 个答案:

答案 0 :(得分:0)

  

但是,font.family仅包含一项:sans-serif,当   matplotlib文档指出应该有五个值   内部font.family

否,font.family应该包含这五个值之一,即您要使用的字体系列。

您必须确保将字体系列设置为 serif ,并且字体 Times New Roman 位于衬线字体列表的顶部。它是这样的:

plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.serif'] = ['Times New Roman'] + plt.rcParams['font.serif']

从技术上讲,您无需附加列表的其余部分(最后一部分)。如果实际上没有Times New Roman,它只是为matplotlib提供了一个后备。

另请参阅example in the docs