You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib垂直滑块标签改为垂直显示的实现方法

解决Matplotlib垂直滑块标签垂直显示的问题

方法1:直接修改标签的旋转与位置(无需继承类)

官方垂直滑块创建后,可直接通过滑块对象的label属性获取文本实例,设置旋转角度并调整位置,就能让标签垂直显示,完全不需要继承原有类。

以下是修改后的示例代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button

fig, ax = plt.subplots()
plt.subplots_adjust(left=0.25, bottom=0.25)
t = np.arange(0.0, 1.0, 0.001)
a0 = 5
f0 = 3
s = a0 * np.sin(2 * np.pi * f0 * t)
l, = plt.plot(t, s, lw=2)
plt.axis([0, 1, -10, 10])

# 创建垂直滑块
axfreq = plt.axes([0.1, 0.25, 0.0225, 0.63])
freq_slider = Slider(
    ax=axfreq,
    label='Freq',
    valmin=0.1,
    valmax=30,
    valinit=f0,
    orientation="vertical"
)

# 核心修改:设置标签垂直显示
freq_slider.label.set_rotation(90)  # 旋转90度让文本垂直
freq_slider.label.set_position((-1.5, 0.5))  # 调整位置,让标签在滑块左侧垂直居中

def update(val):
    freq = freq_slider.val
    l.set_ydata(a0 * np.sin(2 * np.pi * freq * t))
    fig.canvas.draw_idle()

freq_slider.on_changed(update)

resetax = plt.axes([0.8, 0.025, 0.1, 0.04])
button = Button(resetax, 'Reset', hovercolor='0.975')

def reset(event):
    freq_slider.reset()
button.on_clicked(reset)

plt.show()

批量生成垂直滑块的处理方案

如果要生成n个间距较小的垂直滑块,只需在循环创建时统一处理每个滑块的标签即可:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

fig, ax = plt.subplots()
plt.subplots_adjust(left=0.15, bottom=0.2, right=0.9)
t = np.arange(0.0, 1.0, 0.001)
n_sliders = 5
sliders = []

# 初始化绘图数据
s = np.zeros_like(t)
for i in range(n_sliders):
    s += (i+1) * np.sin(2 * np.pi * (i+2) * t)
l, = plt.plot(t, s, lw=2)
plt.axis([0, 1, -20, 20])

# 批量创建并配置垂直滑块
slider_width = 0.02
slider_spacing = 0.03
start_x = 0.02

for i in range(n_sliders):
    # 创建滑块轴
    ax_slider = plt.axes([start_x + i*(slider_width + slider_spacing), 0.2, slider_width, 0.6])
    # 创建垂直滑块
    slider = Slider(
        ax=ax_slider,
        label=f'Ampl {i+1}',
        valmin=0,
        valmax=10,
        valinit=i+1,
        orientation="vertical"
    )
    # 设置垂直标签
    slider.label.set_rotation(90)
    slider.label.set_position((-1.2, 0.5))  # 根据滑块宽度调整位置,避免重叠
    sliders.append(slider)

    # 更新绘图的回调函数
    def update(val, idx=i):
        total = 0
        for j in range(n_sliders):
            total += sliders[j].val * np.sin(2 * np.pi * (j+2) * t)
        l.set_ydata(total)
        fig.canvas.draw_idle()

    slider.on_changed(update)

plt.show()

关键注意点

  • 用set_rotation(90)实现标签垂直,也可传入-90让文本反向垂直(上下颠倒)
  • set_position()的参数是相对于滑块轴的坐标,可根据滑块宽度和间距灵活调整,避免标签重叠
  • 全程无需继承Slider或SliderBase类,直接操作已有属性即可实现需求

内容的提问来源于stack exchange,提问作者diegoperez01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:36:03