一、官方文档
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib.colors import ListedColormap, BoundaryNorm
x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
#dydx用于说明线段颜色赋值的关联值
dydx = np.linspace(0, 3 * np.pi, 500)
#创建一组线段,方便赋予不同颜色,
#其维度为 线段数量 x 每个线段的点的个数 x 2(每个点的x坐标和y坐标)
#reshape(-1, 1, 2)中的-1表示该位置上的值自动填充,此时其维度为500 x 1 x 2
points = np.array([x, y]).T.reshape(-1, 1, 2)
#下列语句将points 前499个点与后499个点按第二个方向拼接,形成499 x 2 x 2的数组
#相当于制作了499个连续相连的线段,每个线段两个点,上一个线段的尾点即下一个线段的起点
segments = np.concatenate([points[:-1], points[1:]], axis=1)
fig, axs = plt.subplots(1, 1)
#下面开始设置各个线段的参数
cmap = ListedColormap(['r', 'g', 'b'])
#将数据规范到-1到1之间,且按照[-1, -0.5, 0.5, 1]中的节点分成cmap.N(3)个区间,
#赋予各区间一个整数,相当于制定分类规则
norm = BoundaryNorm([0, np.pi, 2*np.pi, 3*np.pi], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
#传入各线段颜色的关联值,基于该数据以及上述规则判断各线段的颜色
lc.set_array(dydx)
lc.set_linewidth(2)
line = axs.add_collection(lc)
#添加颜色条
fig.colorbar(line)
axs.set_xlim(x.min(), x.max())
axs.set_ylim(-1.1, 1.1)
plt.show()
二、个人思路
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
x1 = x[:int(500/3)]
x2 = x[int(500/3):int(500/3)*2]
x3 = x[int(500/3)*2:]
y1 = np.sin(x1)
y2 = np.sin(x2)
y3 = np.sin(x3)
plt.plot(x1,y1)
plt.plot(x2,y2,linestyle = '-.')
plt.plot(x3,y3,linestyle = ':')
参考资料: