python如何讓一條線擁有多種顏色、線型?


一、官方文檔

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 = ':')

參考資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM