一、官方文檔
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 = ':')
參考資料: