首页 > 解决方案 > 有没有办法在散点图中获取单个点的 x 和 y 坐标?

问题描述

我需要获取散点图上某个点的 x 和 y 数据。问题最终来自这样一个事实,即当我创建散点图时,所有点似乎只有一位艺术家。因此,当我尝试从 a 获取数据时PickEvent,无论我认为我选择哪一点,我都会得到同一个艺术家,并且该艺术家只有所有点的信息,而不仅仅是我想要的点:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(10)
y = np.random.rand(10)

def onpick(event):
    print(event.artist.get_offsets())

plt.scatter(x,y, picker=5)
fig = plt.gcf()

cid_pick = fig.canvas.mpl_connect("pick_event", onpick)

单击任何点都会给出:

[[0.45112647259825556 0.4907629706037132]
 [0.33787291043006795 0.5887038833531208]
 [0.8199764461928875 0.9208354619124024]
 [0.895372081518229 0.04417158362163531]
 [0.684880991787429 0.7841477288024523]
 [0.35336419403882413 0.4661111405652941]
 [0.2931993381852086 0.9233951635623667]
 [0.14585223675195036 0.1010652948995101]
 [0.06953600296535056 0.7883191757749332]
 [0.44078084770006243 0.6173437126304926]]

在 THEORY 中,我可以只使用“button_press_event”来获取单击位置的 x 和 y 数据,但随后我必须执行某种最接近的配对算法才能将其与特定点相关联,这似乎有点过度杀戮似乎是一项常见的任务。我的问题是是否有更“内置”的方式来做到这一点?

标签: pythonpython-3.xmatplotlib

解决方案


您可以使用event.ind索引到您从中获得的偏移量get_offsets()

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(10)
y = np.random.rand(10)

def onpick(event):
    print(event.artist.get_offsets()[event.ind][0])

plt.scatter(x,y, picker=5)
fig = plt.gcf()

cid_pick = fig.canvas.mpl_connect("pick_event", onpick)

推荐阅读