首页 > 解决方案 > 在不清除滑块的情况下清除 Matplotlib 图

问题描述

我目前正在创建一个需要更新 matplotlib 图形的应用程序。我坚持以下步骤。
我在同一个图中有一个散点图和滑块。更改滑块值后,我需要在不清除滑块的情况下清除散点图。以下是我实现的代码,但它并没有清除情节。该.clf()函数同时删除滑块和散点图。有没有办法可以只删除情节而不影响滑块?

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider


X1=np.arange(10)
Y1=np.arange(10)
Z1=np.arange(10)
fig,ax=plt.subplots()
ax=plt.scatter(X1,Y1,Z1)

axSlider1=plt.axes([0.3,0.9,0.3,0.05])
Slder2=Slider(ax=axSlider1,label='Slider',valmin=1,valmax=4,valinit=2)

plt.show()

# Function to clear the scatter plot without effecting slider.
def val_update(val):
    plt.cla()

Slder2.on_changed(val_update)

标签: pythonmatplotlibipywidgets

解决方案


fig,ax=plt.subplots()

将 Axes 对象分配给ax- 然后

ax=plt.scatter(X1,Y1,Z1)

将 PathCollection 对象分配给ax. val_update对错误的事情采取行动也是如此。

这似乎解决了您询问的问题。

X1=np.arange(10)
Y1=np.arange(10)
Z1=np.arange(10)
fig,ax=plt.subplots()
path=plt.scatter(X1,Y1,Z1)

axSlider1=plt.axes([0.3,0.9,0.3,0.05])
Slder2=Slider(ax=axSlider1,label='Slider',valmin=1,valmax=4,valinit=2)


# Function to clear the scatter plot without effecting slider.
def val_update(val):
    print(val)
    ax.clear()

Slder2.on_changed(val_update)

plt.show()

Matplotlib Gallery是一个很好的资源,您可以浏览它以查找您想要的功能并查看它们是如何制作的。- 喜欢这个滑块演示

如果您认为您将来会使用 matplotlib,我建议您按照入门教程和至少艺术家教程进行学习


推荐阅读