Matplotlib - 套索選擇器



什麼是套索選擇器?

Matplotlib 中的套索選擇器是一個強大的工具,它使使用者能夠透過繪製自由形式的不規則形狀(套索)來互動式地選擇繪圖中的資料點或感興趣的區域。它提供了一種直觀的方式來動態地子集或操作資料,使其在探索性資料分析和互動式視覺化應用程式中特別有用。

Matplotlib 中的套索選擇器為互動式資料探索和分析提供了多功能工具。透過將其與回撥函式和自定義選項相結合,使用者可以建立符合其特定需求的動態且引人入勝的視覺化效果。

用例和應用

以下是套索選擇器的用例和應用。

資料子集 - 套索選擇器對於選擇和隔離繪圖中的特定資料點非常有價值,使使用者能夠關注大型資料集中的感興趣子集。

異常值檢測 - 它可用於透過互動式突出顯示和檢查感興趣區域來識別資料中的異常值或異常模式。

資料分析 - 套索選擇器透過允許使用者動態地探索資料中的關係和模式來促進探索性資料分析。

互動式視覺化 - 在互動式視覺化應用程式中,套索選擇器透過提供一種直接且直觀的方式來與繪製的資料進行互動來增強使用者參與度。

與其他小部件整合 - 套索選擇器可以與其他 Matplotlib 小部件(如按鈕或滑塊)組合,以建立更復雜和互動式的視覺化效果。

套索選擇器的關鍵特性和元件

以下是套索選擇器的關鍵特性和元件。讓我們詳細瞭解每一個。

啟用

要使用套索選擇器,我們需要在 Matplotlib 繪圖中啟用它。這通常是透過使用 **matplotlib.widgets** 模組提供的 **LassoSelector** 類來完成的。並且我們還需要匯入 matplotlib 庫的 pyplot 模組。

from matplotlib import pyplot as plt
from matplotlib.widgets import LassoSelector

初始化

建立一個 **LassoSelector** 類的例項,並將其與我們希望套索選擇發生在其中的特定座標軸關聯。我們還需要定義一個回撥函式,該函式將在套索完成時執行。

示例

在下面的示例中,**ax** 是套索選擇將發生在其中的座標軸物件,而 onlasso 是將在選擇頂點時呼叫的回撥函式。

from matplotlib import pyplot as plt
from matplotlib.widgets import LassoSelector
def onlasso(vertices):
   # Process selected data based on vertices
   pass
lasso = LassoSelector(ax, onlasso)

互動式選擇

一旦套索選擇器被啟用,使用者就可以透過點選並拖動滑鼠來與繪圖進行互動,從而在所需資料點周圍繪製套索。套索的頂點在拖動過程中會不斷更新。

回撥函式

此示例中的回撥函式 **onlasso** 在套索選擇完成時執行。它接收定義套索形狀的頂點列表。在回撥函式中,我們可以實現處理或操作落在選定區域內的資料點的邏輯。

def onlasso(vertices):
   # Process selected data based on vertices
   selected_data = process_data_within_lasso(vertices)
   # Perform further actions with the selected data

自定義

套索選擇器可以自定義以適應特定要求。可以調整套索線的顯示、套索檢測的容差或游標樣式等引數,以增強使用者體驗。

在下面的程式碼行中,**lineprops** 允許自定義套索線的顯示,其他引數定義屬性,如用於選擇的按鈕、跨度座標和互動性。

lasso = LassoSelector(ax, onlasso, lineprops=dict(color='red', linewidth=2), button=1, spancoords='data', interactive=True)

示例

現在讓我們將上面定義的所有步驟組合在一起建立程式碼。在此示例中,**PointInPolygon** 函式檢查每個資料點是否在套索多邊形內。然後,選定的點將在繪圖中突出顯示。

import matplotlib.pyplot as plt
from matplotlib.widgets import LassoSelector
import numpy as np
# Generate sample data
x = np.random.rand(100)
y = np.random.rand(100)
# Create a scatter plot
fig, ax = plt.subplots()
scatter = ax.scatter(x, y)
# Callback function for lasso selection
def onlasso(selected):
   indices = np.nonzero(selected)[0]
   selected_points = [(x, y)]
   print("Selected points:", selected_points)
# Create a Lasso Selector
lasso_selector = LassoSelector(ax, onlasso)
plt.show()
輸出
Lasso Selector

示例

以下是如何在 Matplotlib 中使用套索選擇器的示例。在此示例中,我們將建立一個散點圖,使用者可以使用套索選擇器互動式地選擇資料點。選定的資料點將列印到控制檯。

import matplotlib.pyplot as plt
from matplotlib.widgets import LassoSelector
import numpy as np
# Generate random data for the scatter plot
np.random.seed(42)
x_data = np.random.rand(50)
y_data = np.random.rand(50)
# Function to be called on lasso selection
def onlasso(vertices):
   selected_indices = lasso_selector.ind_verts
   selected_data = [(x_data, y_data)]
   print("Selected Data:", selected_data)
# Create a scatter plot
fig, ax = plt.subplots()
scatter = ax.plot(x_data, y_data, picker=True)  # Enable picker for each data point
# Add Lasso Selector to the plot
lasso_selector = LassoSelector(ax, onlasso)
# Function to handle pick events (enable data point picking)
def onpick(event):
   if event.artist == scatter:
      lasso_selector.set_active(True)
# Connect the pick event to the onpick function
fig.canvas.mpl_connect('pick_event', onpick)
plt.show()
輸出
Lasso Selector Matplolib
廣告