如何在 matplotlib 图表中禁用 xkcd?

23

你可以通过以下方式启用xkcd样式:

import matplotlib.pyplot as plt
plt.xkcd()

但如何禁用它?

我尝试过:

self.fig.clf()

但这不会起作用。

7个回答

42
简而言之,要么像@Valentin所提到的那样使用上下文管理器,要么在调用plt.xkcd()之后调用plt.rcdefaults()

发生的情况是plt.xkcd()改变了rc参数(这基本上是它的工作原理)。

plt.xkcd()保存当前rc参数并返回一个上下文管理器(这样您就可以使用with语句),以便在结束时重置它们。如果您没有保存plt.xkcd()返回的上下文管理器,则无法返回到调用之前完全相同的rc参数状态。

换句话说,假设您之前做过类似于plt.rc('lines', linewidth=2, color='r')的操作,然后再调用plt.xkcd()。如果您没有使用with plt.xkcd():或者manager = plt.xkcd(),则调用plt.rc之后rcParams的状态将会丢失。

然而,您可以通过调用plt.rcdefaults()恢复为默认的rcParams。只是您不会保留调用plt.xkcd()之前所做的任何特定更改。

18

我在文档中看到了这个,它有帮助吗?

with plt.xkcd():
    # This figure will be in XKCD-style
    fig1 = plt.figure()
    # ...

# This figure will be in regular style
fig2 = plt.figure()

如果没有,你可以查看 matplotlib.pyplot.xkcd 的代码,了解他们如何生成允许反转配置的上下文管理器。


8

就使用那个

import matplotlib.pyplot as plt

plt.rcdefaults()
# before showing the plot

7

你可以尝试

manager = plt.xkcd()
# my xkcd plot here
mpl.rcParams.update(manager._rcparams)

这应该重置先前的状态,模拟上下文管理器。显然,它并没有所有上下文管理器的功能,例如在异常情况下的重置等。

或者,不需要干扰上下文管理器的内部实现。

saved_state = mpl.rcParams.copy()
mpl.xkcd()
# my xkcd plot here
mpl.rcParams.update(saved_state)

0

您可以在 plt.show() 前使用 plt.rcdefaults 或 pyplot.rcdefaults。

这肯定会将 rcparams 重置为默认值。我尝试过了,它有效。


0

只需简单使用逗号即可,

plt.xkcd(False)

那对我很有效


考虑添加有用的文档链接,例如这个。这将使您的答案更加突出。此外,请避免使用单行代码,因为它们通常不受欢迎。 - tornikeo
字体不会被重置,但我注意到有波浪线。 - rhody

0
将此代码添加到您的代码开头:
import matplotlib as mpl

mpl.rcParams.update(mpl.rcParamsDefault)

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