J_y*_*ang 0 python matplotlib jupyter
我有一个基于下拉值的绘图特定数据范围的下拉列表。但是,它会不断为输出创建新图,而不是刷新相同的图。请帮忙,这是一个单元格。我查了一个帖子,我可以在输出中进行绘图,但它似乎没有做任何事情。
from IPython.display import clear_output
out = widgets.Output()
w = widgets.Dropdown(
options=alist,
description='List',
)
ax = plt.figure()
def on_change(change):
global ax
if change['name'] == 'value' and (change['new'] != change['old']):
with out:
ax = sns.boxplot(data = mydata[change['new']])
plt.show()
w.observe(on_change)
display(w)
out
Run Code Online (Sandbox Code Playgroud)
对于我尝试过的特定包版本,ipywidgets 捕获输出似乎不适用于 matplotlib。我不确定这是否相关,但在 2017年提到了一个老问题。一个可行的解决方案是使用clear_output清除所有输出并重新绘制所有内容,如下所示:
from IPython.display import display, clear_output
import ipywidgets as widgets
import seaborn as sns
mydata = {'a': range(3),
'b': range(4),
'c': range(5)}
default = 'b'
sns.boxplot(data=mydata[default])
w = widgets.Dropdown(
options=mydata.keys(),
value = default,
description='List',
)
display(w)
def on_change(change):
if change['name'] == 'value' and (change['new'] != change['old']):
clear_output()
display(w)
sns.boxplot(data = mydata[change['new']])
w.observe(on_change)
Run Code Online (Sandbox Code Playgroud)
选择/更改下拉列表时,当整个内容被清除和重绘时,输出将“闪烁”。我希望这适合您的特定用例。
我的软件包版本是:
ipykernel 5.1.0 py37h39e3cac_0
ipython 7.2.0 py37h39e3cac_0
ipython_genutils 0.2.0 py37_0
ipywidgets 7.4.2 py37_0
jupyter 1.0.0 py37_7
jupyter_client 5.2.3 py37_0
jupyter_console 6.0.0 py37_0
jupyter_core 4.4.0 py37_0
matplotlib 3.0.2 py37h5429711_0
seaborn 0.9.0 py37_0
widgetsnbextension 3.4.2 py37_0
Run Code Online (Sandbox Code Playgroud)