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 中的函式連線起來
要捕獲幻燈片更改,我們需要將 Slider onchange
事件連線到一個函式。我們將呼叫滑塊上的 on_changed
函式,該函式應在發生某些事情時執行。
請記住省略括號,因為你只傳遞函式物件。更新函式中的 val
引數將獲取滑塊值。
def update(val):
# Update Code ...
slider.on_changed(update)
現在我們想在使用滑塊時更改繪圖。在這個例子中,我們用這兩行程式碼簡單地降低或提高圖線。
使用 set_ydata
、set_data
或 set_data
函式建立它們後,你可以更改繪圖。
def update(val):
data_2 = [x + val for x in data_1]
p.set_ydata(data_2)
執行此程式碼並使用滑塊後,你會看到類似這樣的內容。
輸出:
現在我們學習瞭如何在繪圖中放置元件,如何將連線到函式,以及如何更改繪圖。
完整程式碼:
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()
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