Como escolher um ponto em uma subparcela e destacá-lo nas subparcelas adjacentes no matplotlib (extensão para a região dos pontos)
Eu quero criar uma matriz de plotagem de dispersão que será composta por algumas sub-plotagens. Eu extraí de um arquivo .txt meus dados e criei uma matriz de forma (x, y, z, p1, p2, p3). As três primeiras colunas da matriz representam as coordenadas x, y, z da imagem original da qual esses dados provêm e as três últimas colunas (p1, p2, p3), alguns outros parâmetros. Conseqüentemente, em cada linha da matriz, os parâmetros p1, p2, p3 têm as mesmas coordenadas (x, y, z). No gráfico de dispersão, quero visualizar o parâmetro p1 contra os parâmetros p2, p3 em um primeiro estágio. Para cada ponto que eu escolher, gostaria que seus parâmetros (x, y, z) das três primeiras colunas da minha matriz fossem anotados e que o ponto com as mesmas coordenadas na subtrama adjacente fosse destacado ou que sua cor fosse modificada.
No meu código, duas subparcelas são criadas e no terminal são impressos os valores (p1, p2 ou p3) que são adquiridos escolhendo um ponto, os respectivos valores do mesmo ponto na subparcela adjacente e os (x, y, z ) parâmetros deste ponto.
Além disso, quando eu escolho um ponto na primeira subparcela, a cor do ponto correspondente na segunda subtrama muda, mas não vice-versa. Essa modificação de cor é reconhecível apenas se eu redimensionar manualmente a figura. Como eu poderia adicionar interatividade para ambas as subparcelas sem precisar ajustar a figura para perceber alguma alteração? Que tipo de modificação devo fazer para que essa interatividade seja viável em uma matriz de gráfico de dispersão reduzida, como nesta pergunta "Existe uma função para criar matrizes de gráfico de dispersão no matplotlib?". Eu não sou um usuário experiente de python, matplotlib, portanto qualquer tipo de ajuda será apreciada
import numpy as np
import matplotlib.pyplot as plt
import pylab as pl
def main():
#load data from file
data = np.loadtxt(r"data.txt")
plt.close("all")
x = data[:, 3]
y = data[:, 4]
y1 = data[:, 5]
fig1 = plt.figure(1)
#subplot p1 vs p2
plt.subplot(121)
subplot1, = plt.plot(x, y, 'bo', picker=3)
plt.xlabel('p1')
plt.ylabel('p2')
#subplot p1 vs p3
plt.subplot(122)
subplot2, = plt.plot(x, y1, 'bo', picker=3)
plt.xlabel('p1')
plt.ylabel('p3')
plt.subplots_adjust(left=0.1, right=0.95, wspace=0.3, hspace=0.45)
# art.getp(fig1.patch)
def onpick(event):
thisevent = event.artist
valx = thisevent.get_xdata()
valy = thisevent.get_ydata()
ind = event.ind
print 'index', ind
print 'selected point:', zip(valx[ind], valy[ind])
print 'point in the adjacent subplot', x[ind], y1[ind]
print '(x,y,z):', data[:, 0][ind], data[:, 1][ind], data[:, 2][ind]
for xcord,ycord in zip(valx[ind], valy[ind]):
plt.annotate("(x,y,z):", xy = (x[ind], y1[ind]), xycoords = ('data' ),
xytext=(x[ind] - .5, y1[ind]- .5), textcoords='data',
arrowprops=dict(arrowstyle="->",
connectionstyle="arc3"),
)
subplot2, = plt.plot(x[ind], y[ind], 'ro', picker=3)
subplot1 = plt.plot(x[ind], y[ind], 'ro', picker=3)
fig1.canvas.mpl_connect('pick_event', onpick)
plt.show()
main()
Em conclusão, as informações são impressas no terminal, independentemente da subparcela, quando eu escolho um ponto. Porém, a cor é modificada apenas nos pontos da subtrama direita, quando eu escolho um ponto na subtrama esquerda e não vice-versa. Além disso, a mudança de cor não é perceptível até eu ajustar a figura (por exemplo, movê-la ou redimensioná-la) e quando escolho um segundo ponto, o anterior permanece colorido.
Qualquer tipo de contribuição será apreciada. Agradeço antecipadamente.