gpt4 book ai didi

python - Jupyter 笔记本 : duplicated scatter plot using when using ipywidgets

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:25 25 4
gpt4 key购买 nike

我正在尝试使用复选框控制散点图的显示。当我使用 interact 函数构建它时,它按预期工作。根据复选框中的值显示或隐藏绘图。

import matplotlib.pyplot as plt
from ipywidgets import interact, widgets
%matplotlib inline

def on_change(Display):
if Display == True:
plt.scatter(x,y)
plt.show()
return Display

interact(on_change, Display=False);

当我每次单击复选框时都尝试使用观察功能做同样的事情时,我会在下面显示一个额外的图。我需要做什么才能让它重新绘制相同的图,使其像上面的示例一样工作?

我想交互示例中的某些内容正在清除显示,但不清楚如何手动执行此操作。

import matplotlib.pyplot as plt
from ipywidgets import interact, widgets
%matplotlib inline

x = [1,2,3,4,5,6,7,8]
y = [5,2,4,2,1,4,5,2]

def on_change(change):
if change['new'] == True:
scat = plt.scatter(x,y)
plt.show()

cb = widgets.Checkbox(False, description = "Display")
cb.observe(on_change, names='value')
display(cb)

最佳答案

我对您的示例进行了一些修改,希望能够展示您想要的内容。我采取了更面向对象的路线,不确定您是否特别想避免它,但它有助于实现您想要的结果,看起来您正在转向一个简单的 GUI。

1) 包含一个输出小部件 (out) - 基本上是一个单元格输出,您可以像普通小部件一样显示它。当您想要打印到特定的输出小部件时,您可以使用上下文管理器 block (with out:)。您还可以使用 out.clear_output()

清除小部件

2) 在 matplotlib 中使用面向对象的接口(interface),而不是使用 plt。我发现这更容易控制显示哪些图以及在正确的时间显示在哪个位置。

  • 使用 plt.ioff() 暂时挂起交互式 matplotlib
  • 使用 fig, ax = plt.subplots() 创建图形和坐标轴。注意图形可以有多个轴/子图,但我们只需要一个。
  • 使用 ax.scatter(x,y) 将散点数据“绘制”到轴上,但这不会导致它出现。
  • 使用 display(fig) 显式显示图形。

我假设您希望每次选中该框时都重新绘制图形,因此我已将其包含在观察函数中。如果您的数字没有改变,将它移出循环是有意义的。


import matplotlib.pyplot as plt
from ipywidgets import interact, widgets
%matplotlib inline

out = widgets.Output()

x = [1,2,3,4,5,6,7,8]
y = [5,2,4,2,1,4,5,2]

def on_change(change):
if change['new'] == True:
with out:
plt.ioff()
fig,ax = plt.subplots()
ax.scatter(x,y)
display(fig)
else:
out.clear_output()

cb = widgets.Checkbox(False, description = "Display")
cb.observe(on_change, names='value')
display(cb)
display(out)

关于python - Jupyter 笔记本 : duplicated scatter plot using when using ipywidgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51601061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com