matplotlib 将ipywidget滑块定位到图的一侧[复制]

b1payxdu  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(116)

此问题已在此处有答案

How to change the default position of a ipywidget slider to the side of a matplotlib figure?(2个答案)
上个月关门了。
我是ipywidget的新手。我正在使用ipywidget滑块来更改matplotlib图中的图像。然而,我想更改滑块的位置,将其放在图像旁边。我已经寻找过类似的问题,但没有一个能满足我,因为我想保留matplotlib库来绘制数据以及“%matplotlib widget”命令,以便能够轻松获得光标的位置。
下面是我的代码:

%matplotlib widget
import ipywidgets as widgets
import matplotlib.pyplot as plt
import numpy as np

# Generating example data of the same form of my data #
example_time = np.array([-5, -1, -0.5, -0.2, 0, 0.1, 0.2, 0.5, 1, 2, 5, 10])
example_data = np.random.rand(len(example_time), 192,192)

fig, ax = plt.subplots(1,1)
def single_img_plot(val):
    ax.clear()
    ax.imshow(example_data[np.where(example_time==val)[0][0]])
    ax.set_title("{} ns".format(val))

slider = widgets.interact(single_img_plot, val=widgets.SelectionSlider(
    description=' ', orientation='vertical', options=example_time[::-1], value=example_time[0]))

这是我获得的输出:

虽然我更喜欢这样的东西:

dz6r00yl

dz6r00yl1#

如果你显式地创建小部件,你可以把它们和图形画布一起放在HBox中(注意,我使用plt.ioff()来避免在notebook中重复图形:

%matplotlib widget
import ipywidgets as widgets
import matplotlib.pyplot as plt
import numpy as np

# Generating example data of the same form of my data #
example_time = np.array([-5, -1, -0.5, -0.2, 0, 0.1, 0.2, 0.5, 1, 2, 5, 10])
example_data = np.random.rand(len(example_time), 192,192)

output = widgets.Output()
with plt.ioff():
    fig, ax = plt.subplots(1,1)
    
def single_img_plot(val):
    ax.clear()
    ax.imshow(example_data[np.where(example_time==val)[0][0]])
    ax.set_title("{} ns".format(val))

slider = widgets.SelectionSlider(description=' ', orientation='vertical', options=example_time[::-1], value=example_time[0],
                                justify_content="bottom",)
w = widgets.interactive(single_img_plot, val=slider)

widgets.HBox([fig.canvas, w], layout=widgets.Layout(width='60%', display='flex', align_items='center'))

相关问题