Как расскрасить отрезки графика разными цветами из списка значений?

Есть данные для графика:

p = [10, 10, 10, 11, 12, 13, 12, 11, 10, 10, 10, 11, 12, 13, 12, 11, 10, 10, 10]

И есть другие данные:

s = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, 1, 3, 3, 2, 1, 1, 2]

Где: p это график для plt.plot(p), а значения s - это раскраска для него разными цветами. Причём в s могут быть и другие значения, например 5 или 6 и т.п. - они всегда будут разными цветами.

Как расскрасить график по s?


Ответы (1 шт):

Автор решения: MaxU
import numpy as np
from matplotlib.pyplot import cm

uniq_colors = set(s)
n = len(uniq_colors)
x = np.arange(len(p))
p = np.array(p)
fig, ax = plt.subplots(figsize=(19, 3))
colors = {i:c for i,c in zip(uniq_colors, cm.rainbow(np.linspace(0,1,n)))}
for i in range(1, len(p)):
    ax.plot(x[i-1:i+1], p[i-1:i+1], c=colors[s[i]])

введите сюда описание изображения

→ Ссылка