Matplotlib. Как использовать одни и те же цвета для построения графика каждый раз?

#python #matplotlib #data-visualization

#python #matplotlib #визуализация данных

Вопрос:

У меня есть этот код:

 import matplotlib.pyplot as plt

plt.figure(figsize=[13, 8])
for x in range(10):
    labels = pred_labels[:len(predict)]
    plt.scatter(tnse[:, 0][labels == x], tnse[:, 1][labels == x], label=x)
plt.legend(fontsize='large')
plt.title('MNIST predictions')
plt.show()
  

У меня есть predict — maxtrix, который является выводом нейронной сети и pred_label который является вектором чисел [0..9]

Код должен отображать что-то вроде этого: разброс

И это так, но каждая группа точек имеет разный цвет каждый раз, когда я хочу их отобразить. Есть ли способ придать им постоянный цвет?

Я пытался использовать это:

 plt.scatter(tnse[:, 0][labels == x], tnse[:, 1][labels == x], label=x, c=x)
  

Но это не сработало

Ответ №1:

Решение, которое я часто использую :

  • создайте N цвета из цветовой карты,
  • укажите цвет для каждого графика.

Вот минимальный пример, вдохновленный вашим :

 import matplotlib.pyplot as pp
from numpy import random, linspace

# datas
x, y = [], []
for _ in range(10):
    x.append(random.rand()   .1 * random.rand(32))
    y.append(random.rand()   .1 * random.rand(32))

# colors
colors = pp.cm.plasma(linspace(0, 1, 10))

# plot
pp.close(0)
pp.figure(0)
for color, i in zip(colors, range(10)):
    pp.plot(x[i], y[i], 'o', label=f"{i}", mec=color, mfc=color)
pp.legend()
pp.show()
  

это выводит:
введите описание изображения здесь

Ответ №2:

Вы можете использовать itertools для циклирования более 10 цветов (придавая одинаковый цвет каждому классу при каждом его запуске). Просто замените colors свои цвета для цикла

 import itertools

colors = itertools.cycle([colors])
plt.scatter(tnse[:, 0][labels == x], tnse[:, 1][labels == x], label=x, color=next(colors))
  

РЕДАКТИРОВАТЬ: согласно комментарию ниже

Комментарии:

1. В этом случае все они будут красными. Цвета должны быть разными для всех классов, но одинаковыми для каждого графика