Matplotlib 滑块在用于更改 clim 时重新缩放颜色条
Matplotlib sliders rescale colorbar when used to change clim
我正在尝试使用 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()
我试过在更新绘图之前删除“更新”函数中的颜色条,然后重新绘制它并向颜色条添加 cax 参数,但它没有任何改变。
我是 运行 python Jupyter Notebook 中的 3.5.6 和 matplotlib 3.0.0。
已成功解决问题。在“update”函数的开头调用“cbar.ax.relim()”允许在不调整颜色栏大小的情况下更改滑块上的 clim。另外 tmdavison 是正确的,不需要“img.update()”。
上面示例中的“更新”函数应替换为以下内容:
def update(val):
cbar.ax.relim()
_cmin = s_cmin.val
_cmax = s_cmax.val
img.set_clim([_cmin, _cmax])
我正在尝试使用 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()
我试过在更新绘图之前删除“更新”函数中的颜色条,然后重新绘制它并向颜色条添加 cax 参数,但它没有任何改变。
我是 运行 python Jupyter Notebook 中的 3.5.6 和 matplotlib 3.0.0。
已成功解决问题。在“update”函数的开头调用“cbar.ax.relim()”允许在不调整颜色栏大小的情况下更改滑块上的 clim。另外 tmdavison 是正确的,不需要“img.update()”。
上面示例中的“更新”函数应替换为以下内容:
def update(val):
cbar.ax.relim()
_cmin = s_cmin.val
_cmax = s_cmax.val
img.set_clim([_cmin, _cmax])