Поскольку каждая строка имеет только один цвет, вам необходимо явно установить этот цвет для строки. Чтобы получить цвет из определенного значения ориентации numeri c, вам необходимо создать цветовую карту и норму. Цветовая карта может быть любой по вашему выбору. Норма должна быть установлена с использованием всего диапазона столбца «ориентация». Используя норму (чтобы получить значение от 0 до 1), вы можете проиндексировать цветовую карту и получить значение rgb.
As plt.scatter
пытается проверить, даете ли вы один цвет для всех точек вместе или один цвет на точку, значения rgb могут вызвать путаницу. Поэтому безопаснее всего создать массив вокруг значения цвета (т.е. c=[cmap(norm(row.orientation))]
вместо c=cmap(norm(row.orientation))
).
Цветовая карта и норма также могут использоваться для создания сопутствующей цветовой шкалы.
Вот пример кода для начала:
from matplotlib import pyplot as plt
from matplotlib.cm import ScalarMappable
import numpy as np
import pandas as pd
N = 30
df = pd.DataFrame({'coords': [np.random.normal(0, 1, size=(np.random.randint(5, 50), 2)) + np.random.uniform(0, 50, 2)
for _ in range(N)],
'orientation': np.random.uniform(-1, 1, N)})
cmap = plt.get_cmap('magma')
norm = plt.Normalize(df.orientation.min(), df.orientation.max())
for row in df.itertuples():
coords = np.array(row.coords)
x, y = coords[:, 1], coords[:, 0]
plt.scatter(x, y, c=[cmap(norm(row.orientation))])
plt.colorbar(ScalarMappable(cmap=cmap, norm=norm), label='orientation')
plt.show()
пример сюжета