У меня есть два 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()
Можно было бы использовать 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()