在涉及交互式小部件的Jupyter Notebook中删除相同单元格中的先前Matplotlib图形

10

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

我有一个由所有连续变量组成的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

他们能够正常工作,也就是说,每当我切换下拉框并从三个可用变量中选择一对变量时,他们都可以生成散点图。然而,问题在于之前生成的图形在显示新图形之前并没有被清除。换句话说,matplotlib不会更新现有图形中的图形,而只是将图形/图表堆叠在一起。因此,如果我更改了10次变量对的选择,我会得到10个散点图,这不是我想要的结果。
有人能帮帮我吗?
提前致谢。

你展示的代码会导致类似于ValueError: could not convert string to float: a的错误。从下面的答案中,你可以看到一个[mcve]是什么样子的。请在提问时始终使用这样的[mcve]。 - ImportanceOfBeingErnest
1个回答

16

您可以在函数结尾处添加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

在这里输入图片描述


非常感谢。这解决了我的问题。我一直以为plt.show()只是用于在笔记本中显示图形(相当于%matplotlib inline),仅此而已。 - Hanazono Sakura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接