首页 > 解决方案 > 将两个 matplotlib 滑块合并为一个

问题描述

我目前正在使用 2 个滑块来设置绘图的 yrange(最小值和最大值)。我可以以某种方式将这两个滑块合并为一个 - 使其看起来像一个普通的 windows 滑块可能是一个自定义小部件吗?我不想使用 tkinter 或 Qt。

此外,当程序运行 2 个窗口打开时,第一个窗口很快消失。它是由使用 Slider 引起的。您是否知道仅弹出主窗口而不是启动窗口的任何修复方法......

第三,我收到了一个用户警告:这个数字包括与tight_layout() 不兼容的轴,因此结果可能不正确。任何建议将不胜感激。

下面是最小的可重现示例。

################################################# ##########################

import matplotlib.pyplot as plt

import numpy as np

from matplotlib.widgets import Slider

np.random.seed(1977)

fig, ax = plt.subplots()

axes = [ax, ax.twinx(), ax.twinx()]

fig.subplots_adjust(right=0.75)

axes[-1].spines['right'].set_position(('axes', 1.2))

axes[-1].set_frame_on(True)

axes[-1].patch.set_visible(False)


colors = ('Green', 'Red', 'Blue')

for ax, color in zip(axes, colors):

       data = np.random.random(1) * np.random.random(10)

       ax.plot(data, marker='o', linestyle='none', color=color)

       ax.set_ylabel('%s Thing' % color, color=color)

       ax.tick_params(axis='y', colors=color)

axes[0].set_xlabel('X-axis')


YMIN=0

YMAX=1

def update(val): 

       ax.set_ylim(slider1.val, slider2.val)


slider_position1 = plt.axes([0.9, 0.025, 0.01, 0.35], facecolor = "green")

slider_position2 = plt.axes([0.95, 0.025, 0.01, 0.35], facecolor = "skyblue") 

slider1 = Slider(slider_position1,'From', valmin=YMIN, valmax=YMAX, valinit=YMIN, \

orientation="vertical", color = "skyblue", valfmt ='%1.1f')  

slider2 = Slider(slider_position2,'To', valmin=YMIN, valmax=YMAX, valinit=YMAX,\

orientation="vertical", slidermin= slider1, color = "green", valfmt ='%1.1f') 

slider1.slidermax = slider2



slider1.on_changed(update)

slider2.on_changed(update)


fig.tight_layout()

plt.show()

标签: pythonmatplotlibmergewidgetslider

解决方案


推荐阅读