matplotlib legend_elements возвращает пустое - PullRequest
0 голосов
/ 19 января 2020

У меня есть следующий график рассеяния, где я определяю разные цвета для ребер и маркеров:

    label_colors = [mcolors.to_rgba('rgbkmy'[lbl]) for lbl in list(labels)]
    pred_colors = [mcolors.to_rgba('rgbkmy'[lbl]) for lbl in list(preds)]

    classes = ['Agents','AI','DB','IR','ML','HCI']

    fig, ax = plt.subplots()

    scatter = plt.scatter(X_embedded[:, 0], X_embedded[:, 1], c=label_colors, edgecolors=pred_colors, linewidths=2)


    legend1 = ax.legend(*scatter.legend_elements(),
                        loc="lower left", title="Classes")
    ax.add_artist(legend1)

    if(is_show):plt.show()

К сожалению, scatter.legend_elements() возвращает пустой список, где, если я изменю его на c=labels который представляет собой список целых чисел, я могу построить легенду, но затем edgecolors ломается, потому что edgecolors требует RGBA в качестве ввода.

Цель для меня состоит в том, чтобы иметь легенда с цветами, указанными в label_colors,edgecolors, и что сама метка в легенде будет соответствовать classes (0-> Агенты и т. д. c.)
Это текущий сюжет (легенда пуста) enter image description here

1 Ответ

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

Это то, что в итоге сработало

    classes = ['Agents', 'AI', 'DB', 'IR', 'ML', 'HCI']
    class_colours = ['r', 'g', 'b', 'k', 'm', 'y']
    recs = []
    for i in range(0, len(class_colours)):
        recs.append(mpatches.Rectangle((0, 0), 1, 1, fc=class_colours[i]))
    plt.legend(recs, classes, loc=4)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...