如何在matplotlib图形中禁用xkcd?
你可以通过以下方式开启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
的代码,看看他们是怎么生成一个上下文管理器的,这个管理器可以让你恢复配置。