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