【发布时间】:2017-11-17 14:31:38
【问题描述】:
我正在使用 2 个滑块来调整 2D 热图的颜色条;一个用于底部(最小)和一个用于顶部(最大)。我想确保两者不能重叠,即如果整个范围是 0 到 5,并且我将最大值设置为 2,那么最小值不能超过 2。这应该以交互方式发生。我怎样才能做到这一点?此外,是否有一种方法可以将两个滑块集成为一个?谢谢你。
我的GUI 的一个例子。以及代码的相关部分:
def update(val, s=None):
"""Retreives the value from the sliders and updates the graph accordingly"""
_cmin = s_cmin.val
_cmax = s_cmax.val
pcm.set_clim([_cmin, _cmax])
plt.draw()
def reset(event):
"""Resets the sliders when the reset button is pressed"""
s_cmin.reset()
s_cmax.reset()
fig, ax = plt.subplots(figsize=(13,8))
plt.subplots_adjust(left=0.25,bottom=0.25)
# define axis minima and maxima:
x_min = Xi.min()
x_max = Xi.max()
y_min = Yi.min()
y_max = Yi.max()
c_min = Zi.min()
c_max = Zi.max()
pcm = ax.pcolormesh(Xi,Yi,Zi)
cb = plt.colorbar(pcm)
axcolor = 'lightgoldenrodyellow'
axx = plt.xlim([x_min, x_max])
ayy = plt.ylim([y_min, y_max])
# create a space in the figure to place the two sliders:
ax_cmin = plt.axes([0.15, 0.10, 0.65, 0.02], facecolor=axcolor)
ax_cmax = plt.axes([0.15, 0.15, 0.65, 0.02], facecolor=axcolor)
# the first argument is the rectangle, with values in percentage of the figure
# size: [left, bottom, width, height]
# create each slider on its corresponding place:
s_cmax = Slider(ax_cmax, 'max', c_min, c_max, valinit=c_max, valfmt='%1.4f')
s_cmin = Slider(ax_cmin, 'min', c_min, c_max, valinit=c_min, valfmt='%1.4f')
# set both sliders to call update when their value is changed:
s_cmin.on_changed(update)
s_cmax.on_changed(update)
# create a space in the figure to place the reset button
resetax = plt.axes([0.8, 0.025, 0.1, 0.04])
# create the reset button
button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')
button.on_clicked(reset)
# create a space in the figure to place the textboxes:
axbox_xmin = plt.axes([0.07, 0.55, 0.04, 0.04])
axbox_xmax = plt.axes([0.12, 0.55, 0.04, 0.04])
axbox_ymin = plt.axes([0.07, 0.49, 0.04, 0.04])
axbox_ymax = plt.axes([0.12, 0.49, 0.04, 0.04])
# create the textboxes
tb_xmin = TextBox(axbox_xmin,'x', color=axcolor, hovercolor='0.975', label_pad=0.01)
tb_xmax = TextBox(axbox_xmax,'', color=axcolor, hovercolor='0.975')
tb_ymin = TextBox(axbox_ymin,'y', color=axcolor, hovercolor='0.975', label_pad=0.01)
tb_ymax = TextBox(axbox_ymax,'', color=axcolor, hovercolor='0.975')
# create the submit action
tb_xmin.on_submit(submit)
tb_xmax.on_submit(submit)
tb_ymin.on_submit(submit)
tb_ymax.on_submit(submit)
plt.show()
【问题讨论】:
-
滑块在哪里?
-
我添加了我的 GUI 的示例图像
-
代码在哪里?创建这些滑块的代码?我出去了。其他一些同行可能会帮助你。
-
添加了相关部分的代码
-
这与“相关”代码无关。这是关于minimal reproducible example。你能举一个这样的例子吗?那么肯定会有人回答你的问题。如果没有,你需要幸运地找到愿意自己修补的人。
标签: python matplotlib slider