Matplotlib 中的互動式滑塊

Maxim Maeder 2023年1月30日
  1. 在 Matplotlib 中的繪圖下方放置滑塊元件
  2. 將滑塊事件與 Matplotlib 中的函式連線起來
Matplotlib 中的互動式滑塊

本教程教你如何將滑塊放置在繪圖中並進行互動。在使用繪圖之前,我們需要設定我們的指令碼以使用該庫。

從匯入 Matplotlib 開始,我們從 random 模組載入 randrange 函式以快速生成一些資料。請記住,你的輸出看起來會有所不同。

import matplotlib.pyplot as plt
from random import randrange

data_1 = [randrange(0, 10) for _ in range(0, 10)]

fig, ax = plt.subplots()
(p,) = ax.plot(data_1)

在 Matplotlib 中的繪圖下方放置滑塊元件

以下程式碼顯示了我們如何將 Matplotlib 庫的 Slider 元件放置在繪圖中。

在第一行中,我們建立了一些軸來描述滑塊的放置位置。請參閱 Axes 文件頁面 以檢視這些數字的作用。

接下來,我們製作一個新的滑塊物件並填寫一些引數。第一個是滑塊的位置和尺寸,我們在第二個引數中對其進行標記。

接下來的引數描述滑塊,valmin 是最小值,valmax 是最大值,valinit 是起始值。最後,我們調整繪圖位置,使繪圖和滑塊不重疊。

程式碼:

axfreq = plt.axes([0.1, 0.1, 0.8, 0.05])
slider = Slider(
    ax=axfreq,
    label="Offset",
    valmin=-5,
    valmax=5,
    valinit=0,
)
plt.subplots_adjust(left=0.1, bottom=0.25)
plt.show()

輸出:

在 Matplotlib 中的繪圖下方放置滑塊元件

如你所見,繪圖下方有一個滑塊。你可以滑動它,但沒有任何反應,因為它在更改事件中沒有連線到任何東西。

我們將在下一部分中對此進行介紹。

將滑塊事件與 Matplotlib 中的函式連線起來

要捕獲幻燈片更改,我們需要將 Slider onchange 事件連線到一個函式。我們將呼叫滑塊上的 on_changed 函式,該函式應在發生某些事情時執行。

請記住省略括號,因為你只傳遞函式物件。更新函式中的 val 引數將獲取滑塊值。

def update(val):
    # Update Code ...


slider.on_changed(update)

現在我們想在使用滑塊時更改繪圖。在這個例子中,我們用這兩行程式碼簡單地降低或提高圖線。

使用 set_ydataset_dataset_data 函式建立它們後,你可以更改繪圖。

def update(val):
    data_2 = [x + val for x in data_1]
    p.set_ydata(data_2)

執行此程式碼並使用滑塊後,你會看到類似這樣的內容。

輸出:

將滑塊事件與 Matplotlib 中的函式連線起來

現在我們學習瞭如何在繪圖中放置元件,如何將連線到函式,以及如何更改繪圖。

完整程式碼:

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from random import randrange

data_1 = [randrange(0, 10) for _ in range(0, 10)]
data_2 = [randrange(0, 10) for _ in range(0, 10)]

fig, ax = plt.subplots()
(p,) = ax.plot(data_1)

plt.subplots_adjust(left=0.1, bottom=0.25)

axfreq = plt.axes([0.1, 0.1, 0.8, 0.05])
slider = Slider(
    ax=axfreq,
    label="Offset",
    valmin=-5,
    valmax=5,
    valinit=0,
)


def update(val):
    data_2 = [x + val for x in data_1]
    p.set_ydata(data_2)


slider.on_changed(update)
plt.show()
作者: Maxim Maeder
Maxim Maeder avatar Maxim Maeder avatar

Hi, my name is Maxim Maeder, I am a young programming enthusiast looking to have fun coding and teaching you some things about programming.

GitHub