Вы можете попытаться использовать mplcursor для выполнения действия при нажатии на ячейку. mplcursor
имеет параметр hover=
, который при значении False (по умолчанию) отображает аннотацию при нажатии. Вы можете отменить аннотацию и выполнить другой тип действия. mplcursor
помогает определить, где вы щелкнули.
Вместо того, чтобы скрывать аннотацию, вы можете заполнить ее содержимым файла. Чтобы закрыть аннотацию, либо щелкните ее правой кнопкой мыши, либо щелкните левой кнопкой мыши, чтобы открыть другую.
Ниже приведен демонстрационный код с некоторыми изобретенными фиктивными полями для файла json:
from sklearn.metrics import confusion_matrix
from matplotlib import pyplot as plt
import mplcursors
import json
y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
labels = ["ant", "bird", "cat"]
confusion_mat = confusion_matrix(y_true, y_pred, labels=labels)
heatmap = plt.imshow(confusion_mat, cmap="plasma", interpolation='nearest')
plt.colorbar(heatmap, ticks=range(3))
plt.xticks(range(len(labels)), labels)
plt.yticks(range(len(labels)), labels)
cursor = mplcursors.cursor(heatmap, hover=False)
@cursor.connect("add")
def on_add(sel):
i, j = sel.target.index
filename = f'filename_{i}_{j}.json'
text = f'Data about pred:{labels[i]} – actual:{labels[j]}\n'
try:
with open(filename) as json_file:
data = json.load(json_file)
for p in data['people']:
text += f"Name: {p['name']}\n"
text += f"Trials: {p['trials']}\n"
except:
text += f'file {filename} not found'
sel.annotation.set_text(text)
plt.show()