Matplotlib - 範圍滑塊



簡介

Matplotlib 庫本身並未在其標準小部件集中提供範圍滑塊小部件。但是,值得注意的是,構建在 Matplotlib 之上的外部庫或互動式工具,例如matplotlib-widgets或其他自定義實現,可能會提供範圍滑塊功能。

範圍滑塊是一種圖形使用者介面 (GUI) 元素,通常用於透過拖動兩個滑塊來指定值的範圍。每個滑塊代表範圍的一個端點,滑塊之間的區域代表所選範圍。

鑑於範圍滑塊並非 Matplotlib 的原生部分,我們將在此提供關於範圍滑塊如何工作以及一些潛在用例的概念性解釋。

範圍滑塊的關鍵特性

以下是 matplotlib.widgets 庫中範圍滑塊的關鍵特性。

雙滑塊互動 - 範圍滑塊通常包含兩個滑塊,它們可以沿線性軌道獨立移動。每個滑塊的位置代表所選範圍的下限和上限。

即時反饋 - 移動滑塊時,會有即時反饋,直觀地指示所選範圍。此互動式方面允許使用者精確選擇所需的範圍。

與繪圖整合 - 範圍滑塊通常整合到繪圖或圖表中,以動態篩選或突出顯示特定範圍內的資料。例如,使用者可能希望放大時間序列圖中的特定時間段。

回撥函式 - 範圍滑塊與回撥函式相關聯,這些函式在移動滑塊時觸發。這些回撥允許開發人員響應使用者互動並相應地更新繪圖或執行其他操作。

概念性實現

以下是使用 Matplotlib 的事件處理和互動式功能實現範圍滑塊的概念性解釋。

在這個概念性示例中,我們使用了一些重要的模組和函式,讓我們詳細瞭解一下它們。

generate_data - 此函式生成一些用於繪圖的示例資料 (x, y)。

update - 每當移動滑塊時都會呼叫此函式。它根據所選範圍更新繪圖。

Slider - 建立兩個滑塊,即 slider_lower 和 slider_upper,分別代表所選範圍的下限和上限。

建立並顯示初始繪圖,使用者可以使用滑塊互動式地調整範圍。

示例

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
# Function to generate sample data
def generate_data():
   x = range(100)
   y = [val for val in x]
   return x, y
# Function to update the plot based on the selected range
def update(val):
   lower_val = slider_lower.val
   upper_val = slider_upper.val
   selected_x = x[lower_val:upper_val]
   selected_y = y[lower_val:upper_val]
   ax.clear()
   ax.plot(x, y, label='Original Data')
   ax.plot(selected_x, selected_y, label='Selected Range', color='orange')
   ax.legend()
   ax.set_title(f'Selected Range: {lower_val} to {upper_val}')
# Generate sample data
x, y = generate_data()
# Create a figure and axes
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
# Define initial range
initial_lower = 0
initial_upper = 20
# Create sliders
ax_lower = plt.axes([0.1, 0.1, 0.65, 0.03])
ax_upper = plt.axes([0.1, 0.05, 0.65, 0.03])
slider_lower = Slider(ax_lower, 'Lower', 0, len(x) - 1, valinit=initial_lower, valstep=1)
slider_upper = Slider(ax_upper, 'Upper', 0, len(x) - 1, valinit=initial_upper, valstep=1)
# Connect sliders to the update function
slider_lower.on_changed(update)
plt.show()

輸出

初始繪圖

Initial Plot

所選範圍繪圖

Selected Plot

動態選擇

在此示例中,我們使用滑塊動態選擇資料值。

示例

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
import numpy as np
# Function to generate data for the plot
def generate_data(start, end):
   x = np.linspace(start, end, 100)
   y = np.sin(x)
   return x, y
# Function to update the plot based on the selected range
def update_plot(val):
   lower_val = slider_lower.val
   upper_val = slider_upper.val
   x, y = generate_data(lower_val, upper_val)
   line.set_data(x, y)
   ax.relim()
   ax.autoscale_view()
   plt.draw()
# Create a figure and axes
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
# Initial range
initial_lower = 0
initial_upper = 10
# Create sliders
ax_lower = plt.axes([0.1, 0.1, 0.65, 0.03])
ax_upper = plt.axes([0.1, 0.05, 0.65, 0.03])
slider_lower = Slider(ax_lower, 'Lower', 0, 20, valinit=initial_lower)
slider_upper = Slider(ax_upper, 'Upper', 0, 20, valinit=initial_upper)
# Connect sliders to the update function
slider_lower.on_changed(update_plot)
slider_upper.on_changed(update_plot)
# Generate initial data and plot
x_initial, y_initial = generate_data(initial_lower, initial_upper)
line, = ax.plot(x_initial, y_initial)
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_title('Dynamic Plot based on RangeSlider')
plt.show()

輸出

初始繪圖

Dynamic Init

動態選擇繪圖

Dynamic Select

用例

以下是 matplotlib 庫的範圍滑塊的用例。

縮放和選擇 - 範圍滑塊通常用於使用者需要放大繪圖的特定區域或選擇資料集內值範圍的場景。

時間序列過濾 - 在時間序列資料中,範圍滑塊允許使用者基於特定時間範圍過濾資料,從而可以更仔細地檢查趨勢或異常。

資料探索 - 範圍滑塊透過允許使用者動態調整可見範圍並關注資料的特定部分來促進互動式資料探索。

引數調整 - 對於表示引數化函式或模擬的繪圖,範圍滑塊可以控制引數值的範圍,從而提供一種動態觀察輸出變化的方法。

廣告