我正在創建一個交互式圖形,可以在其中選擇散點圖的點以進一步操作,例如,與另一點交換位置。當選擇該點時,它會變黑,表示該點已被選中。從散點圖創建標籤及其點對象的字典
有可能是圖中的幾個散點圖和每個小區都有一個唯一的顏色,以便保留原來的顏色對於每個點,我需要創建標籤(鍵)和他們的點對象的字典(值)。在配對的其他值包括原有的色,xy位置等
這裏是一個散點圖,它的選圖事件功能:
self.scatter = self.mplwidget_layout.canvas.ax.scatter(
y=...,
x=...,
color=...,
edgecolors=...,
picker=True
)
self.mplwidget_layout.canvas.mpl_connect('pick_event', self.select_point)
def select_point(self, event):
if event.mouseevent.button == 1:
facecolor = self.scatter._facecolors[event.ind,:]
if (facecolor == np.array([[0, 0, 0, 1]])).all():
# Look up label-object dict
else:
self.scatter._facecolors[event.ind,:] = (0, 0, 0, 1)
self.scatter._edgecolors[event.ind,:] = (1, 1, 1, 1)
self.mplwidget_layout.canvas.draw()
好像我不能指定單個標籤(在數組中)到他們的點,但我可以將偏移映射到標籤。有沒有辦法給每個點一個名稱並通過名稱檢索它們?
如何訪問散點圖中的點對象列表?
點和指定的名稱:
'scatter'返回一個'PathCollection',它是一個名爲'paths'的屬性,它反過來應該包含關於你的點的信息。如果它的工作原理與條形圖中的Rect一樣,你可以使用一個'dict'來做你的映射,但是這必須經過測試...... –
@ThomasKühn'paths'屬性似乎不是獨特。您可以使用下面答案中提供的示例代碼嘗試它。我使用'print(event.artist._paths)'進行檢查。我想這是因爲只有一個散點圖,所以這可能有助於檢測點擊哪個散點圖。 – FatHippo
'_paths'是唯一的,我檢查過(通過'get_paths()'來獲得它們更好)。但是,如果我正確解釋了您的問題,則可以使用相同的座標來繪製每個「子圖」中的點。在這種情況下,每個'_paths'對象都是* equal *,但是不是** *是相同的*(不同之處在於'=='和'is')。 –