python - 绘制 Seaborn 图形的输出小部件的清除输出不起作用
问题描述
我想创建一个带有几个下拉框和一个带有 Seaborn 的绘图的输出小部件,如下所示。目的是使用不同的下拉框来选择变量,并根据用户输入输出不同的 Seaborn 图。
这里是代码。它有效,但不如预期。
dd = wd.Dropdown(
options=["YlGnBu","Blues","BuPu","Greens"],
value="Blues",
description='chosse cmap:',
disabled=False,
)
myout = wd.Output()
def draw_plot(change):
with myout:
myout.clear_output()
print('plotting out the following: sns.heatmap(df.corr(), annot=True, cmap = "YlGnBu")')
plt.figure(figsize=(8, 3))
sns.heatmap(df.corr(), annot=True, cmap = change.new)
plt.title("Correlation matrix");
dd.observe(draw_plot, names='value')
display(dd)
display(myout)
每次选择一个新的保管箱变量时,上面的代码都不会清除输出小部件,并添加了 Seaborn 绘图。
我看到了这些解决方案: 停止 seaborn 在彼此之上绘制多个图形
根据我的意见,这并不令人满意。我想每次在输出小部件中显示一个新图形,即完全清除内容然后再次添加内容;再次阴谋。我不明白为什么 clear_output() 会清除文本行而不是图形。
其次,正如提到的链接中的一些答案所指出的,如果与 Seaborn 合作,我不想求助于底层库,即 Matplotlib。我认为这是一种解决方法。
那么正确的方法是怎样走呢?
谢谢
解决方案
以下代码适用于我。
我不确定这是否是一个错字,但你写clear_output()
的不是myout.clear_output()
另外,我相信您需要plt.show()
在回调结束时致电。
import ipywidgets as wd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
a = np.random.random(size=(5,5))
dd = wd.Dropdown(
options=["YlGnBu","Blues","BuPu","Greens"],
value="Blues",
description='chosse cmap:',
disabled=False,
)
myout = wd.Output()
def draw_plot(change):
with myout:
print('plotting out the following: sns.heatmap(df.corr(), annot=True, cmap = "{}")'.format(change.new))
myout.clear_output()
sns.heatmap(a, annot=True, cmap = change.new)
plt.show()
dd.observe(draw_plot, names='value')
display(dd)
display(myout)
推荐阅读
- python - 当我使用“pip install”时,Pip 正在卸载从源代码构建的 pytorch
'。有办法吗? - java - 运行 specjbb2015 时错误“max-jOPS 的上限被测量为 0”的原因是什么
- string - 引发了另一个异常:键入“列表”
' 不是类型 'List 的子类型 '函数结果' - java - 有没有办法用 maven 编译单个类文件和依赖项
- git - SmartGit:图表看起来很混乱
- html - 当 div 内有另一个 div 时,如何使 div 内联
- python - 预期类型“Iterable”(匹配泛型类型“Iterable[_T1]”),改为“RasterImageExtensions”
- bash - Linux bash:具有范围和步骤的循环不循环
- java - 上传的对象公共 URL 是使用 java 将对象上传到 GCP 后的下载链接
- permissions - python 虚拟环境中的 Jupyter 内核无法以 Permission Denied 错误启动