Раскрашивание цифр, используемых в качестве маркеров, в разные цвета в matplotlib - PullRequest
0 голосов
/ 26 мая 2020

Я хочу представить набор данных из точек, каждая точка имеет координаты x и y и значение single-di git, и каждое из значений должно быть представлено определенным цветом. Что мне удалось сделать, так это создать что-то вроде этого, что выглядит достаточно красиво:

# x, y and digits are one-dimensional np.arrays of the same shape
plt.scatter(x, y, marker='o', c=digits)
#random colormap
plt.viridis()

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

for i in range(len(digits)):
    plt.scatter(x[i], y[i], c=digits[i], marker=('${}$'.format(digits[i])))

Что почти сработало, но 'c = digits [i]', похоже, не работает потому что di git на самом деле не кодирует какой-либо конкретный цвет. Я думаю (поправьте меня, если я ошибаюсь), что первый код работает, потому что python каким-то образом автоматически понимает, что под c = digits я не имел в виду какой-либо реальный цвет, а хотел различать две точки.

Итак, возникает вопрос: что проще всего сделать во втором случае, чтобы указать цвета цифр, не указывая их напрямую, но используя цветовую карту по умолчанию? (в идеале я хотел бы получить sth, идентичный тому, что делает первый код, но с цифрами вместо точек)

1 Ответ

0 голосов
/ 26 мая 2020

Кажется, я нашел решение, поэтому на случай, если у sb возникнет похожий вопрос:

cmap = plt.cm.get_cmap('name_of_demanded_colormap', neededColorsNum).colors
for i in range(len(digits)):
    plt.scatter(x[i], y[i], \\
        c=np.array([cmap[digits[i]]]), \\
        marker=('${}$'.format(digits[i])))

Некоторые «объяснения»: - cm - это объект, который нужен богам, чтобы знать, по какой причине;

  • get_cmap - это метод, который создает указанную цветовую карту, которая неожиданно оказывается не массивом, а другим богам известно, какой объект;

  • цветов - это метод цвета map, которая наконец создает sth для работы, матрицу со строками, представляющими цвета;

  • код настолько естественен, что jupyter требует сделать цветовую строку двумерной, потому что некоторая возможность неверной интерпретации .

Какие бы жалобы ни возникали, работает по назначению, так что достаточно хорошо.

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