Matplotlib滑块用于更改clim时会重新缩放颜色栏

2024-04-29 04:53:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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”函数中的颜色栏,然后重新绘制它,并向颜色栏添加cax参数,但它没有改变任何内容

我正在Jupyter笔记本中运行python 3.5.6和matplotlib 3.0.0


Tags: importimgmatplotlib颜色npupdatepltrandom
1条回答
网友
1楼 · 发布于 2024-04-29 04:53:08

设法解决了这个问题。在“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])    

相关问题 更多 >