python - 将两个 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()
解决方案
推荐阅读
- android - Android Studio 中的 Facebook 身份验证无效范围
- networking - 如何在网络浏览器中打开网桥 IP 地址?
- javascript - removeEventListener 不适用于动态分配的元素
- excel - 使用VBA将excel公式分配给变量
- twitter-bootstrap - 变换动画不适用于引导轮播中的第一张幻灯片
- javascript - 单击功能应用于具有相同类的所有 div
- .net - 迁移到较新的框架版本是否可以解决安全问题
- javascript - 从循环中停止逐行javascript动画
- microsoft-graph-api - 通过 MS Graph API 返回用户的employeeId
- json - Mule 3.9 Dataweave 从整数中删除 .00