Как выбрать точку на вспомогательном участке и выделить ее на соседних участках в matplotlib (расширение до области точек)
Я хочу создать матрицу точечного графика, которая будет состоять из нескольких вспомогательных участков. Я извлек из файла .txt мои данные и создал массив формы (x, y, z, p1, p2, p3). Первые три столбца массива представляют координаты x, y, z исходного изображения, из которого поступают эти данные, а последние три столбца (p1, p2, p3) - некоторые другие параметры. Следовательно, в каждой строке массива параметры p1, p2, p3 имеют одинаковые координаты (x, y, z). На графике рассеяния я хочу визуализировать параметр p1 относительно параметров p2, p3 на первом этапе. Для каждой выбранной точки я хотел бы, чтобы ее параметры (x, y, z) из первых трех столбцов моего массива были аннотированы, а точка с такими же координатами в соседнем субплоте была выделена или ее цвет был изменен.
В моем коде создаются два вспомогательных участка, и в терминале печатаются значения (p1, p2 или p3), полученные путем выбора точки, соответствующих значений той же точки в соседнем вспомогательном участке и (x, y, z). ) параметры этой точки.
Более того, когда я выбираю точку в первом субплоте, цвет соответствующей точки во втором субплоте изменяется, но не наоборот. Это изменение цвета можно узнать только в том случае, если я вручную изменил размер фигуры. Как можно добавить интерактивность для обоих участков без необходимости настраивать фигуру, чтобы заметить какие-либо изменения? Какие модификации я должен сделать, чтобы эта интерактивность была возможной в матрице с уменьшенным разбросом, как в этом вопросе "Есть ли функция для создания матриц рассеяния в matplotlib?". Я не опытный пользователь Python, пользователь Matplotlib, поэтому любая помощь будет оценена
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()
В заключение, информация печатается в терминале, независимо от подзаговора, когда я выбираю точку. Но цвет изменяется только в точках правого подзадача, когда я выбираю точку в левом подзаголовке, а не наоборот. Более того, изменение цвета не заметно до тех пор, пока я не настрою фигуру (например, не переместлю ее или не изменим ее размер), а когда я выберу вторую точку, предыдущая останется цветной.
Любой вклад будет оценен. Заранее спасибо.