为 matplotlib Slider 小部件设置刻度标签

Set tick labels for matplotlib Slider widgets

matplotlib 中的 slider 行为随着最近的更新而改变。使用以下代码:

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

fig = plt.figure(figsize=(8, 4))
ax_main = plt.axes([0.15, 0.3, 0.7, 0.6])
ax_skal = plt.axes([0.2, 0.18, 0.65, 0.02], facecolor="lightgrey")

s_skal = Slider(ax_skal, 'time scale', 0.5, 2, valinit=1, valfmt='%0.1f')

#ax_skal.xaxis.set_visible(True)
sl_xticks = np.arange(0.6, 2, 0.2)
ax_skal.set_xticks(sl_xticks)

plt.show() 

我们可以在 matplotlib 3.3.1 及更早版本中生成带有刻度标签的 slider 对象。

但是,在 matplotlib 3.5.1 中,刻度标签已经消失。

x-axis 设置为可见的建议 无效,因为 x-axis 属性 visible 已经 True,属性 in_layout。那么,我们如何为滑块对象设置刻度标签呢?

因为我在这个问题上花了一些时间,所以我想我把答案留在这里。事实证明,更新后的滑块版本占用了它所在的轴 space,并从用于呈现布局的艺术家列表中删除了 x- 和 y-axes 及其脊柱对象。因此,我们必须在创建 slider 对象后再次将 x-axis 对象(或垂直滑块 y-axis 对象)添加到轴:

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

fig = plt.figure(figsize=(8, 4))
ax_main = plt.axes([0.15, 0.3, 0.7, 0.6])
ax_skal = plt.axes([0.2, 0.18, 0.65, 0.02], facecolor="lightgrey")

s_skal = Slider(ax_skal, 'time scale', 0.5, 2, valinit=1, valfmt='%0.1f')

ax_skal.add_artist(ax_skal.xaxis)
sl_xticks = np.arange(0.6, 2, 0.2)
ax_skal.set_xticks(sl_xticks)

plt.show() 

示例输出: