首页 > 解决方案 > 绘制 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。我认为这是一种解决方法。

那么正确的方法是怎样走呢?

谢谢

标签: pythonseabornipywidgets

解决方案


以下代码适用于我。

我不确定这是否是一个错字,但你写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)

推荐阅读