删除 Jupyter Notebook 中涉及交互式小部件的同一单元格中过去的 Matplotlib 图

Remove past Matplotlib plots in the same cell in Jupyter Notebook involving interactive widgets

这只是一个困扰我一段时间的小问题。

我有一个 pandas 数据框,其中包含所有连续变量。我想为任何选定的变量对绘制散点图(使用 matplotlib),同时利用 Jupyter 中的交互式小部件。

假设数据有 3 个数字列:'a'、'b' 和 'c'。

到目前为止我有这些代码行:

def g(x,y):
    plt.scatter(x, y)
interactive_plot = interactive(g, x=['a','b','c'], y=['a','b','c'])
interactive_plot

而且它们工作正常,因为每当我切换 x 和 y 的下拉框以及 select 来自 3 个可用变量的一对变量时,它们确实会生成散点图。但是,这里的问题是在显示新情节之前,不会删除以前制作的情节。换句话说,matplotlib 不会更新现有图形中的绘图,而只是将 plots/figures 堆叠在一起。因此,如果我将变量对的选择更改 10 次,我将得到 10 个散点图,这不是我想要的。

谁能帮我解决这个问题?

提前致谢。

您可以在函数末尾添加 plt.show()。这会在同一个单元格中重新绘制图形,而不是添加新的图形。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from ipywidgets import interactive
%matplotlib inline

columns=['a','b','c']
data = np.cumsum(np.random.rand(10,3),axis=1)
df = pd.DataFrame(data,columns=columns)

def g(x,y):
    plt.scatter(df[x], df[y])
    plt.show()

interactive_plot = interactive(g, x=columns, y=columns)
interactive_plot