如何在matplotlib图中禁用xkcd?

时间:2014-03-09 16:34:21

标签: python matplotlib

您可以通过以下方式打开xkcd样式:

import matplotlib.pyplot as plt
plt.xkcd()

但是如何禁用它?

我试试:

self.fig.clf()

但它不起作用。

7 个答案:

答案 0 :(得分:27)

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

正在发生的事情是rc参数被plt.xkcd()更改(基本上是它的工作方式)。

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

换句话说,假设您在调用plt.rc('lines', linewidth=2, color='r')之前做过plt.xkcd()之类的事情。如果您没有with plt.xkcd():manager = plt.xkcd(),则调用rcParamsplt.rc的状态将会丢失。

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

答案 1 :(得分:11)

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

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的代码,看看他们如何生成允许反转配置的上下文管理器

答案 2 :(得分:5)

你可以尝试

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)

答案 3 :(得分:0)

将此添加到代码的开头

// do some stuff here...

答案 4 :(得分:0)

您可以在plt.show()之前简单地使用plt.rcdefaultspyplot.rcdefaults

它肯定会将rcparams重置为默认值。 我尝试了,就行了。

答案 5 :(得分:0)

只需使用

import matplotlib.pyplot as plt

plt.rcdefaults()
# before showing the plot

答案 6 :(得分:0)

仅使用

plt.xkcd(False)

对我有用的