Matplotlib文本无法显示xkcd字体

3

使用matplotlib的xkcd()函数时,通常的漫画字体都没有显示出来。是有什么变化还是我的操作有误?

    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的内容。


可能是使用matplotlib获取xkcd图的重复问题。 - bastelflp
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

我曾经尝试过那个方法,但又尝试了一次,没有成功。我在想是否更改了该方法以避免与漫画完全相同的外观。 - emrys golden
如果你得到了一张有抖动线条但没有正确字体的图像(就像我在更新的答案中得到的那样),那么很可能是因为该字体未安装在你的计算机上。 - user707650
1
就是这样了。我换了一台新机器,所以我下载了字体并清除了字体缓存。谢谢! - emrys golden
3
新手在这里。你如何下载那个字体,以及如何删除字体缓存? - eran
字体安装完成后,需要清除 matplotlib 字体缓存:Win7:%userprofile%\.matplotlib\fontList.cache - Ubuntu:~/.cache/matplotlib - 来源:https://dev59.com/hF8e5IYBdhLWcg3wF3WV#26106170 - bastelflp

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