Matplotlib文本无法显示xkcd字体

3 投票
1 回答
2161 浏览
提问于 2025-04-19 23:24

在使用 xkcd() 和 matplotpib 的时候,图表里的字体没有显示成通常的漫画字体。是有什么变化,还是我做错了什么?

    x = df['Time']
    y = df['Adjustment']

    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)

    ax1 = fig.add_subplot(1,1,1)
    ax1.plot(x,y)

    ax1.xaxis.set_visible(False)
    ax1.yaxis.set_visible(False)

    plt.axvline(x=2.3, color='k', ls='dashed')
    plt.axvline(x=6, color='k', ls='dashed')

    ax.text(4,4,'Culture Shock', size=16)

    plt.title('Test title')

    plt.xkcd()
    plt.show()

谢谢大家的帮助。

我想说明一下,图表确实会以 xkcd 风格绘制,只是字体没有变成漫画字体,而是显示成类似于 Times New Roman 的样子。

1 个回答

5

正如示例所示,你需要在代码的开头,也就是所有绘图命令之前,放入plt.xkcd()。这样:

from matplotlib import pyplot as plt
import numpy as np

x = np.arange(10)
y = np.sin(x)

plt.xkcd()
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax1 = fig.add_subplot(1,1,1)
ax1.plot(x,y)
ax1.xaxis.set_visible(False)
ax1.yaxis.set_visible(False)
plt.axvline(x=2.3, color='k', ls='dashed')
plt.axvline(x=6, color='k', ls='dashed')
ax.text(4,4,'Culture Shock', size=16)
plt.title('Test title')
plt.show()

这段代码给我生成了这样的图:

enter image description here

你可以看到,图中的线条是摇晃的,但字体不对,这只是因为我在Linux机器上没有这个字体(我在命令行上也收到了关于这个的警告)。如果把plt.xkcd()放在代码的最后,生成的就是普通的matplotlib图,没有摇晃的线条。

下面是pyplot.xkcd()在后台做了什么的总结;它只是设置了很多资源参数:

rcParams['font.family'] = ['Humor Sans', 'Comic Sans MS']
rcParams['font.size'] = 14.0
rcParams['path.sketch'] = (scale, length, randomness)
rcParams['path.effects'] = [
    patheffects.withStroke(linewidth=4, foreground="w")]
rcParams['axes.linewidth'] = 1.5
rcParams['lines.linewidth'] = 2.0
rcParams['figure.facecolor'] = 'white'
rcParams['grid.linewidth'] = 0.0
rcParams['axes.unicode_minus'] = False
rcParams['axes.color_cycle'] = ['b', 'r', 'c', 'm']
rcParams['xtick.major.size'] = 8
rcParams['xtick.major.width'] = 3
rcParams['ytick.major.size'] = 8
rcParams['ytick.major.width'] = 3

撰写回答