首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过交互包装函数修改matplotlib图、ax对象?

如何通过交互包装函数修改matplotlib图、ax对象?
EN

Stack Overflow用户
提问于 2019-06-14 15:02:07
回答 1查看 166关注 0票数 1

我想在函数之外创建无花果,ax对象,然后从函数中修改ax。当我的函数是典型的python函数时,这种方法可以很好地工作,但是当函数被@interact修饰或被ipywidget的交互包起来时就失败了。我很好奇为什么这种带有交互作用的包装会影响通过斧头的能力。

代码语言:javascript
复制
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,然后只修改内部的内容以加快交互滑块更改的呈现时间。如有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2019-06-14 15:08:37

我用的是JuPyter笔记本。当我使用%matplotlib inline时,您的代码对我不起作用,但它与%matplotlib notebook后端一起工作,有以下两个更改(由注释#突出显示)。以前也曾问过here一个类似的问题

代码语言:javascript
复制
%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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56600783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档