如何使用matplotlib.pyplot绘制带参数化颜色映射的2D折线图
Matplotlib实现2D折线颜色随参数动态变化方案
可以实现该效果,matplotlib原生plot方法不支持直接为单条折线的不同分段设置差异化颜色,我们通过LineCollection组件即可实现按t值动态映射颜色的需求,刚好匹配你0对应蓝色、1对应红色的要求。
完整可运行代码
import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollection from matplotlib.colors import Normalize # 生成原始数据 t = np.linspace(0, 200, 200) x = np.array([np.cos(i/(6.28)) for i in range(-100, 100)]) y = np.array([np.sin(i/(6.28)) for i in range(-100, 100)]) # 将连续折线拆分为逐段线段 points = np.array([x, y]).T.reshape(-1, 1, 2) segments = np.concatenate([points[:-1], points[1:]], axis=1) # 配置颜色映射:t值归一化到0-1,coolwarm色卡刚好0对应蓝色、1对应红色 norm = Normalize(vmin=t.min(), vmax=t.max()) cmap = plt.cm.coolwarm # 创建颜色动态变化的线段集合 lc = LineCollection(segments, cmap=cmap, norm=norm) lc.set_array(t) # 传入t值作为颜色映射的依据 lc.set_linewidth(2) # 可自定义线宽 # 绘制图像 fig, ax = plt.subplots() ax.add_collection(lc) # 手动设置坐标范围(LineCollection不会自动适配画布范围) ax.set_xlim(x.min() - 0.1, x.max() + 0.1) ax.set_ylim(y.min() - 0.1, y.max() + 0.1) # 可选:添加颜色条说明t值和颜色的对应关系 plt.colorbar(lc, label='t值映射关系') plt.show()
实现说明
- 核心思路是把整条折线拆分为N个相邻两点组成的小线段,为每个小线段单独匹配对应t值映射的颜色
- 若需要更顺滑的颜色过渡效果,可提高x、y的采样点密度
- 如果你需要自定义蓝色、红色的具体色值,可以通过
LinearSegmentedColormap自定义颜色映射表替换默认的coolwarm即可
内容的提问来源于stack exchange,提问作者Adam Kalinowski
相关产品推荐
相关产品推荐

