Следуя ссылкам и предложениям ImportanceOfBeingErnest в комментариях, я собрал воедино следующее решение для случая, когда требуется график отрезков линий другого цвета.
В идеале, я Хотелось бы, чтобы каждая точка имела определенный цвет, а сегменты линий плавно интерполировали в цветовом спектре между этими соответствующими цветами. Но я полагаю, что matplotlib - это свободное программное обеспечение, поэтому неудивительно, что он не обладает самыми необычными функциями. Если, конечно, если это можно сделать, но я не знаю как?
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
xy = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.hstack([xy[:-1], xy[1:]])
fig, ax = plt.subplots()
lc = LineCollection(segments, colors=np.random.rand(len(segments), 3))
ax.add_collection(lc)
ax.autoscale()
ax.set_title('A multi-color plot')
plt.show()
![enter image description here](https://i.stack.imgur.com/yYbvG.png)
РЕДАКТИРОВАТЬ:
Просто для удовольствия, делая больше шагов и создавая градиент «вручную», как предложено ImportanceOfBeingErnest , мы можем получить, например, что-то вроде этого:
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
x = [0.]
while x[-1]<2 * np.pi :
x.append(x[-1] +1/(100*np.sqrt(1+4*x[-1]*x[-1]*np.cos(x[-1]*x[-1])*np.cos(x[-1]*x[-1]))))
x = np.array(x)
y = np.sin(x ** 2)
xy = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.hstack([xy[:-1], xy[1:]])
myColors = np.random.rand(len(segments), 3)
for i in range(len(segments)//10):
for j in range(9):
myColors[10*i+j+1] = myColors[10*i]+(myColors[10*(i+1)]-myColors[10*i])*(j+1)/10
fig, ax = plt.subplots()
lc = LineCollection(segments, colors=myColors)
ax.add_collection(lc)
ax.autoscale()
ax.set_title('A multi-color plot')
plt.show()
![enter image description here](https://i.stack.imgur.com/GZpAk.png)