Как отличить точечные разбросанные матплотлибы на кирке

1

У меня есть два data1 data2 pandas: data1 и data2

Они показаны на графике. Я могу щелкнуть по точке, чтобы показать информацию по этому вопросу. Но только из одного набора данных. Как использовать его для обоих наборов данных? Также мне нужно показать информацию из другого массива, обращающегося к данным по индексу.

from matplotlib.pyplot import figure, show

import pandas as pd
# I want to show infrotmation from these dataframes data using indexes on click
initial_data1 = pd.read_csv("data1.csv")
initial_data2 = pd.read_csv("data2.csv")

data1 = initial_data1.copy()
data2 = initial_data2.copy()

data1 = SomeProcessing(data1) #I use this data to make a plot
data2 = SomeProcessing(data2) #I use this data to make a plot

def showScatter():
    def onpick3(event):
        ind = event.ind
        display(initial_data2.loc[ind])

    fig = figure()
    ax1 = fig.add_subplot(111)
    col = ax1.scatter(data1[:,0], data1[:,1], picker=True)
    col = ax1.scatter(data2[:,0], data2[:,1], marker="+", color = 'black', picker=True)
for i in range(len(data2)):
        ax1.annotate(i, (data2[i,0], data2[i,1]))

    fig.canvas.mpl_connect('pick_event', onpick3)
    show()
Теги:
pandas
matplotlib
data-visualization
scatter-plot

1 ответ

0
Лучший ответ

Можно было бы использовать event.artist чтобы определить, какой художник в осях относится к данному индексу event.ind. Затем этот художник может быть использован для определения того, что делать дальше.

import numpy as np
import matplotlib.pyplot as plt

def showScatter(data, otherdata):
    def onpick(event):
        ind = event.ind[0]
        artist = event.artist
        d = otherdata[scatters.index(artist)]
        ax.set_title("You clicked {}".format(d[ind]))

    fig, ax = plt.subplots()
    scatters = []

    for d in data:
        sc = ax.scatter(d[:,0], d[:,1], picker=True)
        scatters.append(sc)
        for i in range(len(d)):
            ax.annotate(i, (d[i,0], d[i,1]), xytext=(0,3),
                        textcoords="offset points", ha="center", va="baseline")

    return fig.canvas.mpl_connect('pick_event', onpick)


x,y = np.meshgrid(np.arange(10), np.arange(6))
ind = np.random.randint(0,2,size=6*10).astype(bool)
data1 = np.column_stack((x.flatten()[ind], y.flatten()[ind]))
data2 = np.column_stack((x.flatten()[~ind], y.flatten()[~ind]))
cid = showScatter((data1, data2), (data1, data2))
plt.show()
  • 0
    Спасибо за ответ! Но как получить индекс для массива исходных данных?
  • 0
    Что такое «исходный массив данных»? В ответе выше вы индексируете массив, который принадлежит точке, по которой вы щелкнули. Если вы нажали на синюю точку, она будет использовать индекс для индексации массива синих точек, то же самое для оранжевого.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню