matplotlib 设置字体计算机现代和粗体

matplotlib set up font computer modern and bold

我想要一个字体为“计算机现代”(即 Latex 风格)但 x 刻度和 y 刻度为粗体的图。

由于最近升级了matplotlib,我之前的程序已经不能用了。

这是我的老程序:

plt.rc('font', family='serif',size=24)
matplotlib.rc('text', usetex=True)
matplotlib.rc('legend', fontsize=24) 
matplotlib.rcParams['text.latex.preamble'] = [r'\boldmath']

这是输出消息:

test_font.py:26: MatplotlibDeprecationWarning: Support for setting an rcParam that expects a str value to a non-str value is deprecated since 3.5 and support will be removed two minor releases later.
  matplotlib.rcParams['text.latex.preamble'] = [r'\boldmath']

我决定一个可能的解决方案是使用“computer modern”作为字体。这是我的例子:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np


font = {'family' : 'serif',
        'weight' : 'bold',
        'size'   : 12
        }

matplotlib.rc('font', **font)


# Data for plotting
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)

fig, ax = plt.subplots(1,figsize=(9,6))

ax.plot(t, s)

ax.set(xlabel='time (s)  $a_1$', ylabel='voltage (mV)',
       title='About as simple as it gets, folks')
ax.grid()

fig.savefig("test.png")
plt.show()

这是结果:

但是,我无法在字体中设置字体样式。

我尝试将字体系列设置为“cmr10”。这是代码:

font = {'family' : 'serif',
         'weight' : 'bold',
         'size'   : 12,
         'serif':  'cmr10'
         }

matplotlib.rc('font', **font)

似乎“cmr10”使黑体选项消失了。 我犯了一些错误吗? 您有其他可能的解决方案吗?

谢谢

您仍然可以使用您的旧程序,但略有不同。您得到的 MatplotlibDeprecationWarning 表明该参数需要一个 str 值,但它得到了其他东西。在这种情况下,您将其作为 list 传递。去掉括号就可以了:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

plt.rc('font', family='serif',size=24)
matplotlib.rc('text', usetex=True)
matplotlib.rc('legend', fontsize=24)
matplotlib.rcParams['text.latex.preamble'] = r'\boldmath'


# Data for plotting
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)

fig, ax = plt.subplots(1,figsize=(9,6))

ax.plot(t, s)

ax.set(xlabel='time (s)  $a_1$', ylabel='voltage (mV)',
       title='About as simple as it gets, folks')
ax.grid()

fig.savefig("test.png")
plt.show()

上面的代码生成了这个图,没有任何错误: