我正在尝试使用matplotlib滑块来交互地调整图形的颜色比例的上限和下限。虽然滑块可以工作,但颜色栏的大小也会随限制而变化。期望的结果是,当clim通过滑块改变时,颜色条的尺寸不会改变。
最小工作示例:
import numpy as np
import matplotlib
%matplotlib notebook
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
# Generate random data
x = np.linspace(-1,1,101)
y = np.linspace(-1,1,101)
c = np.random.random((101,101))
# Plot data
ax = plt.subplot(111)
plt.subplots_adjust(left=0.25, bottom=0.3)
img = ax.pcolormesh(x,y,c, cmap = "inferno")
cbar = plt.colorbar(img)
# Add Sliders
c_min = np.min(c) #the min and max range of the sliders
c_max = np.max(c)
ax_cmin = plt.axes([0.25, 0.1, 0.65, 0.03]) #positions sliders beneath plot
ax_cmax = plt.axes([0.25, 0.15, 0.65, 0.03])
s_cmin = Slider(ax_cmin, 'min', c_min, c_max, valinit=c_min) #defines sliders
s_cmax = Slider(ax_cmax, 'max', c_min, c_max, valinit=c_max)
def update(val):
_cmin = s_cmin.val
_cmax = s_cmax.val
img.set_clim([_cmin, _cmax])
img.update()
s_cmin.on_changed(update)
s_cmax.on_changed(update)
plt.show()在更新绘图之前,我尝试删除"update“函数中的colorbar,然后重新绘制它,并向colorbar添加cax参数,但这不会改变什么。
我在Jupyter Notebook中运行python 3.5.6和matplotlib 3.0.0。
发布于 2020-11-28 01:04:16
设法解决了这个问题。在"update“函数的开头调用"cbar.ax.relim()”允许用户在不调整颜色条大小的情况下更改滑块上的clim。此外,tmdavison认为不需要"img.update()“是正确的。
以上示例中的"update“函数应替换为以下内容:
def update(val):
cbar.ax.relim()
_cmin = s_cmin.val
_cmax = s_cmax.val
img.set_clim([_cmin, _cmax]) https://stackoverflow.com/questions/65040676
复制相似问题