如何在matplotlib图形中禁用xkcd?

24 投票
7 回答
12830 浏览
提问于 2025-04-17 21:32

你可以通过以下方式开启xkcd风格:

import matplotlib.pyplot as plt
plt.xkcd()

但是怎么关闭它呢?

我尝试了:

self.fig.clf()

但是这样不管用。

7 个回答

0

在你的代码开头加上这个

import matplotlib as mpl

mpl.rcParams.update(mpl.rcParamsDefault)
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)
8

就直接用这个吧

import matplotlib.pyplot as plt

plt.rcdefaults()
# before showing the plot
42

简单来说,要么像@Valentin提到的那样使用上下文管理器,要么在之后调用plt.rcdefaults()

这里发生的事情是,plt.xkcd()会改变一些设置参数(这就是它的工作原理)。

plt.xkcd()会保存当前的设置参数,并返回一个上下文管理器(这样你可以使用with语句),在结束时会把这些参数重置。如果你没有保留plt.xkcd()返回的上下文管理器,那么你就无法恢复到之前的那些设置参数。

换句话说,假设你在调用plt.xkcd()之前做了类似plt.rc('lines', linewidth=2, color='r')的设置。如果你没有使用with plt.xkcd():或者manager = plt.xkcd(),那么在调用plt.rc之后,rcParams的状态就会丢失。

不过,你可以通过调用plt.rcdefaults()来恢复到默认的rcParams。不过这样的话,你之前做的具体设置就不会保留了。

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 的代码,看看他们是怎么生成一个上下文管理器的,这个管理器可以让你恢复配置。

撰写回答