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

у начать кривую с одного цвета и постепенно переходить в другой цвет до конца. Следующая функция в моем MCVE работает, но, конечно, должен быть лучший способ, о котором я еще не узнал ?!

import numpy as np
import matplotlib.pyplot as plt

def colorlist(color1, color2, num):
    """Generate list of num colors blending from color1 to color2"""
    result = [np.array(color1), np.array(color2)]
    while len(result) < num:
        temp = [result[0]]
        for i in range(len(result)-1):
            temp.append(np.sqrt((result[i]**2+result[i+1]**2)/2))
            temp.append(result[i+1])
        result = temp
    indices = np.linspace(0, len(result)-1, num).round().astype(int)
    return [result[i] for i in indices]

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
colors = colorlist((1, 0, 0), (0, 0, 1), len(x))

for i in range(len(x)-1):
    xi = x[i:i+1+1]
    yi = y[i:i+1+1]
    ci = colors[i]
    plt.plot(xi, yi, color=ci, linestyle='solid', linewidth='10')

plt.show()

Ответы на вопрос(1)

Ваш ответ на вопрос