Я не уверен, если это хорошая идея сделать это для scatter
графиков в целом (у вас одно и то же описание для разных точек данных, может быть, просто использовать легенду здесь?), Но я думаю, конкретное решениек тому, что вы имеете в виду, может быть следующее:
from matplotlib import pyplot as plt
# Data
x = [3, 4, 6, 77, 3]
y = [8, 5, 2, 5, 5]
labels = ('null', 'exit', 'power', 'smile', 'null')
# Customize colormap and scatter plot
cm = plt.cm.get_cmap('hsv')
sc = plt.scatter(x, y, c=range(5), cmap=cm)
cbar = plt.colorbar(sc, ticks=range(5))
cbar.ax.set_yticklabels(labels)
plt.show()
Это приведет к такому выводу:
Код объединяет эту демонстрацию Matplotlib и этот SO-ответ .
Надеюсь, что это поможет!
РЕДАКТИРОВАТЬ: Включение комментариевЯ могу думать только о каком-то цветном словаре меток, генерируя пользовательскую цветовую карту из цветов, и прежде чем строить график, явно выбирая правильные индексы цветов из меток.
Вот обновленный код (я добавил несколько дополнительных цветови точки данных для проверки масштабируемости):
from matplotlib import pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
# Color information; create custom colormap
label_color_dict = {'null': '#FF0000',
'exit': '#00FF00',
'power': '#0000FF',
'smile': '#FF00FF',
'addon': '#AAAAAA',
'addon2': '#444444'}
all_labels = list(label_color_dict.keys())
all_colors = list(label_color_dict.values())
n_colors = len(all_colors)
cm = LinearSegmentedColormap.from_list('custom_colormap', all_colors, N=n_colors)
# Data
x = [3, 4, 6, 77, 3, 10, 40]
y = [8, 5, 2, 5, 5, 4, 7]
labels = ('null', 'exit', 'power', 'smile', 'null', 'addon', 'addon2')
# Get indices from color list for given labels
color_idx = [all_colors.index(label_color_dict[label]) for label in labels]
# Customize colorbar and plot
sc = plt.scatter(x, y, c=color_idx, cmap=cm)
c_ticks = np.arange(n_colors) * (n_colors / (n_colors + 1)) + (2 / n_colors)
cbar = plt.colorbar(sc, ticks=c_ticks)
cbar.ax.set_yticklabels(all_labels)
plt.show()
И новый вывод:
Нахождение правильной средней точкикаждый цветовой сегмент (все еще) не хорош, но я оставлю этот оптимизированныйдействия для вас.