如何在matplotlib图中禁用xkcd?

alw*_*btc 13 python matplotlib

你打开xkcd样式:

import matplotlib.pyplot as plt
plt.xkcd()
Run Code Online (Sandbox Code Playgroud)

但是如何禁用它呢?

我尝试:

self.fig.clf()
Run Code Online (Sandbox Code Playgroud)

但它不会起作用.

Joe*_*ton 29

简而言之,要么使用上下文管理器作为@Valentin,要么plt.rcdefaults()之后调用.

发生的事情是rc参数正在改变plt.xkcd()(基本上它是如何工作的).

plt.xkcd()保存当前的rcparams返回一个上下文管理器(这样你可以使用一个with语句)在最后重置它们.如果您没有保留plt.xkcd()返回的上下文管理器,那么您将无法恢复到rc之前完全相同的参数.

换句话说,假设你plt.rc('lines', linewidth=2, color='r')在打电话之前做过类似事情plt.xkcd().如果你没有这样做with plt.xkcd():manager = plt.xkcd(),然后状态rcParams调用后plt.rc会丢失.

但是,您可以rcParams通过调用恢复为默认值plt.rcdefaults().您只是不会保留您在致电之前所做的任何具体更改plt.xkcd().


Val*_*ntz 11

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

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

# This figure will be in regular style
fig2 = plt.figure()
Run Code Online (Sandbox Code Playgroud)

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


Uma*_*har 7

就用那个

import matplotlib.pyplot as plt

plt.rcdefaults()
# before showing the plot
Run Code Online (Sandbox Code Playgroud)


小智 6

你可以试试

manager = plt.xkcd()
# my xkcd plot here
mpl.rcParams.update(manager._rcparams)
Run Code Online (Sandbox Code Playgroud)

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

或者,没有弄乱上下文管理器的内部

saved_state = mpl.rcParams.copy()
mpl.xkcd()
# my xkcd plot here
mpl.rcParams.update(saved_state)
Run Code Online (Sandbox Code Playgroud)