python - 从具有多个数据集的散点图中获取 x,y?

标签 python matplotlib plot

我有一个散点图,它由对scatter 的不同调用组成:

import matplotlib.pyplot as plt
import numpy as np

def onpick3(event):
    index = event.ind
    print '--------------'
    print index
    artist = event.artist
    print artist

fig_handle = plt.figure()

x,y = np.random.rand(10),np.random.rand(10)
x1,y1 = np.random.rand(10),np.random.rand(10)

axes_size = 0.1,0.1,0.9,0.9
ax = fig_handle.add_axes(axes_size)

p = ax.scatter (x,y, marker='*', s=60, color='r', picker=True, lw=2)
p1 = ax.scatter (x1,y1, marker='*', s=60, color='b', picker=True, lw=2)

fig_handle.canvas.mpl_connect('pick_event', onpick3)
plt.show()

我希望这些点可以点击,并获取所选索引的 x,y。 但是,由于 scatter 被多次调用,我两次获得相同的索引,所以我不能在 onpick3 方法中使用 x[index]

有没有直接获取积分的方法?

似乎 event.artist 返回的 PathCollectionscatter 返回的相同(pp1 在这种情况下)。 但是我找不到任何方法来使用它来提取所选索引的 x,y 尝试使用 event.artist.get_paths() - 但它似乎并没有返回所有的散点,但只有我点击的那个..所以我真的不确定是什么event.artist 正在回馈,event.artist.get_paths() 函数正在回馈什么

编辑

似乎 event.artist._offsets 给出了一个具有相关偏移量的数组,但出于某种原因,当尝试使用 event.artist.offsets 我得到了

AttributeError: 'PathCollection' object has no attribute 'offsets'

(虽然如果我理解 docs ,它应该在那里)

最佳答案

要获取 scatter 返回的集合的 x、y 坐标,请使用 event.artist.get_offsets()(出于历史原因,Matplotlib 具有明确的 getter 和 setter . get_offsets 所做的只是返回 self._offsets,但公共(public)接口(interface)是通过“getter”实现的。)

因此,要完成您的示例:

import matplotlib.pyplot as plt
import numpy as np

def onpick3(event):
    index = event.ind
    xy = event.artist.get_offsets()
    print '--------------'
    print xy[index]


fig, ax = plt.subplots()

x, y = np.random.random((2, 10))
x1, y1 = np.random.random((2, 10))

p = ax.scatter(x, y, marker='*', s=60, color='r', picker=True)
p1 = ax.scatter(x1, y1, marker='*', s=60, color='b', picker=True)

fig.canvas.mpl_connect('pick_event', onpick3)
plt.show()

但是,如果您不通过第 3 个或第 4 个变量来改变事物,您可能不想使用 scatter 来绘制点。请改用 plotscatter 返回的集合比 plot 返回的 Line2D 更难处理。 (如果您确实使用 plot,您将使用 x, y = artist.get_data()。)

最后,不要把我自己的项目塞得太满,但如果你可能会发现mpldatacursor有用。它抽象掉了您在这里所做的很多事情。

如果您决定走那条路,您的代码将类似于:

关于python - 从具有多个数据集的散点图中获取 x,y?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19769262/

相关文章:

r - 在 R 中创建索引图表 - 相对起点

Python-在字典/json值中添加多个值

python - matplotlib 中具有不规则数据网格的二维曲面图

python - Matplotlib.pyplot 标签不在标签中显示印地语文本,

python - Matplotlib:具有透明颜色的填充等高线图

macosx下的python matplotlib框架?

graph - 如何在 Gnuplot 中创建蜘蛛图?

python - 从带有转义字符的 cookiejar 问题中请求 dict

python - 如何在服务器端发出 Socket IO 事件

python - 如何使用两个不同的配置文件扩展 Django 用户模型?