使用滑块 matplotlib python 更改散点图的轴
changes axis of scatter plot with slider matplotlib python
我有一个非常大的数据集,希望用户能够沿轴滑动以查看数据的各个部分。我正在尝试利用滑块示例,但我不确定如何更新图形。希望有人能解释一些幕后的情况。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Slider, Button, RadioButtons
fig = plt.figure()
ax = fig.add_subplot(111)
fig.subplots_adjust(left=0.25, bottom=0.25)
min0 = 0
max0 = 10
x = np.arange(10)
y = np.arange(10)
im1 = plt.scatter(x,y, s=3, c=u'b', edgecolor='None',alpha=.75)
#most examples here return something iterable
plt.ylim([0,10])#initial limits
axcolor = 'lightgoldenrodyellow'
axmin = fig.add_axes([0.25, 0.1, 0.65, 0.03], axisbg=axcolor)
axmax = fig.add_axes([0.25, 0.15, 0.65, 0.03], axisbg=axcolor)
smin = Slider(axmin, 'Min', 0, 10, valinit=min0)
smax = Slider(axmax, 'Max', 0, 10, valinit=max0)
def update(val):
plt.ylim([smin.val,smax.val])
ax.canvas.draw()#unsure on this
smin.on_changed(update)
smax.on_changed(update)
plt.show()
图表会在您设置新限制时自行更新。您只是看不到这一点,因为您更新了错误的子图。只需 select 个要更新的子图:
def update(val):
plt.subplot(111)
plt.ylim([smin.val,smax.val])
(这对我有用)
或者甚至:
def update(val):
plt.ylim([smin.val,smax.val])
plt.subplot(111)
smin.on_changed(update)
smax.on_changed(update)
如果您不在其他地方使用它
UPD:在 matplotlib examples 中您还可以找到 fig.canvas.draw_idle()
我有一个非常大的数据集,希望用户能够沿轴滑动以查看数据的各个部分。我正在尝试利用滑块示例,但我不确定如何更新图形。希望有人能解释一些幕后的情况。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Slider, Button, RadioButtons
fig = plt.figure()
ax = fig.add_subplot(111)
fig.subplots_adjust(left=0.25, bottom=0.25)
min0 = 0
max0 = 10
x = np.arange(10)
y = np.arange(10)
im1 = plt.scatter(x,y, s=3, c=u'b', edgecolor='None',alpha=.75)
#most examples here return something iterable
plt.ylim([0,10])#initial limits
axcolor = 'lightgoldenrodyellow'
axmin = fig.add_axes([0.25, 0.1, 0.65, 0.03], axisbg=axcolor)
axmax = fig.add_axes([0.25, 0.15, 0.65, 0.03], axisbg=axcolor)
smin = Slider(axmin, 'Min', 0, 10, valinit=min0)
smax = Slider(axmax, 'Max', 0, 10, valinit=max0)
def update(val):
plt.ylim([smin.val,smax.val])
ax.canvas.draw()#unsure on this
smin.on_changed(update)
smax.on_changed(update)
plt.show()
图表会在您设置新限制时自行更新。您只是看不到这一点,因为您更新了错误的子图。只需 select 个要更新的子图:
def update(val):
plt.subplot(111)
plt.ylim([smin.val,smax.val])
(这对我有用)
或者甚至:
def update(val):
plt.ylim([smin.val,smax.val])
plt.subplot(111)
smin.on_changed(update)
smax.on_changed(update)
如果您不在其他地方使用它
UPD:在 matplotlib examples 中您还可以找到 fig.canvas.draw_idle()