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

Han*_*ura 5 python widget matplotlib data-analysis jupyter

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

我有一个由所有连续变量组成的熊猫数据框。我想为任意选择的变量对绘制散点图(使用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
Run Code Online (Sandbox Code Playgroud)

而且它们运行良好,因为每当我使用x和y的下拉框切换并从3个可用变量中选择一对变量时,它们便会绘制散点图。但是,这里的问题在于,在显示新图之前,不会擦除之前搅动过的图。换句话说,matplotlib不会更新现有图中的绘图,而只是将绘图/图形相互叠加。因此,如果我将变量对的选择更改10次,我会得到10个散点图,这不是我想要的。

有人可以帮我吗?

提前致谢。

Imp*_*est 5

您可以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
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明