Могу ли я нажать на ячейку в матрице путаницы и, таким образом, открыть файл? - PullRequest
0 голосов
/ 20 января 2020

Я хочу создать беспорядочную матрицу, которая позволит мне нажать на любую ячейку и, таким образом, открыть файл с этими результатами прогноза. Например, когда я нажимаю ячейку в i-й строке и j-м столбце, он должен открыть файл json, который показывает мне все элементы, которые действительно имели тип i, но я предсказал, что они будут иметь тип j.

1 Ответ

3 голосов
/ 20 января 2020

Вы можете попытаться использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...