如何让滑块有效调整两张imshow叠加图的第二层透明度?
滑块调整叠加imshow图像透明度的解决方案
你的代码问题在于,img1.set_data(y)只是重置了图像数据,并没有更新透明度属性。要实现滑块调节第二层图像透明度,只需在更新函数中直接修改图像的alpha参数即可:
import numpy as np, matplotlib.pyplot as plt, matplotlib.widgets as mpwidgets OPACITY = 0.5 x = np.random.random((100, 50)) y = np.linspace(0, 0.1, 100*50).reshape((100, 50)) # PLOT fig, (ax0, ax1) = plt.subplots(2, 1, gridspec_kw={'height_ratios': [5, 1]}) img0 = ax0.imshow(x, cmap="jet") img1 = ax0.imshow(y, cmap="jet", alpha=OPACITY) def update(value): # 直接更新图像的透明度参数 img1.set_alpha(value) fig.canvas.draw_idle() slider0 = mpwidgets.Slider(ax=ax1, label='opacity', valmin=0, valmax=1, valinit=OPACITY) slider0.on_changed(update) plt.show()
修改说明
- 移除了全局变量
OPACITY的不必要赋值(如果不需要在其他逻辑中调用该变量,可直接删除) - 核心修改是用
img1.set_alpha(value)替代img1.set_data(y),直接更新第二层图像的透明度属性 - 调用
fig.canvas.draw_idle()触发画布重绘,让透明度变化实时生效
内容的提问来源于stack exchange,提问作者Basj
相关产品推荐
相关产品推荐

