我想在函数之外创建无花果,ax对象,然后从函数中修改ax。当我的函数是典型的python函数时,这种方法可以很好地工作,但是当函数被@interact修饰或被ipywidget的交互包起来时就失败了。我很好奇为什么这种带有交互作用的包装会影响通过斧头的能力。
from ipywidgets import interact
from matplotlib import pyplot as plt
import numpy as np
fig, ax = plt.subplots(1)
def mod_ax(n=10):
x,y = np.random.rand(n), np.random.rand(n)
ax.scatter(x,y)
return
# The interact wrapped function will not modify ax
interact(mod_ax, n=20)
# However, the below line works fine to modify ax;
# comment out the interact line and comment in below line to see modified plot
# mod_ax(n=50)
plt.show()当您使用交互包装函数时,它不会修改ax。我试着把斧头传过来作为一个论据,但还是没有运气。如果您在包装函数中创建无花果、ax或只使用plt.plot而不是ax.plot,则可以工作,但我希望能够在包装函数之外创建无花果、ax,然后只修改内部的内容以加快交互滑块更改的呈现时间。如有任何建议,将不胜感激。
发布于 2019-06-14 15:08:37
我用的是JuPyter笔记本。当我使用%matplotlib inline时,您的代码对我不起作用,但它与%matplotlib notebook后端一起工作,有以下两个更改(由注释#突出显示)。以前也曾问过here一个类似的问题
%matplotlib notebook # <--- Change 1
from ipywidgets import interact
from matplotlib import pyplot as plt
import numpy as np
fig, ax = plt.subplots(1)
def mod_ax(n=10):
x,y = np.random.rand(n), np.random.rand(n)
ax.scatter(x,y)
fig.canvas.draw() # <--- Change 1
return
interact(mod_ax, n=20)https://stackoverflow.com/questions/56600783
复制相似问题