如何为多传感器绘图循环调用不同Colormap及绘图方式优化咨询
问题解决方案
一、实现循环调用不同Colormap并展示温度范围
针对你的需求,修改代码逻辑,让每个传感器对应列表中的指定Colormap,同时通过颜色条直观展示温度与颜色的对应关系,修改后的代码如下:
import matplotlib.pyplot as plt import numpy as np # 假设sensor_number、Temp、t、R、param、model_funct已提前定义 cmap_list = ['Blues', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds'] for j, n in enumerate(sensor_number): fig, ax = plt.subplots(figsize=[10,6]) # 获取当前传感器对应的Colormap current_cmap = plt.cm.get_cmap(cmap_list[j]) # 将温度范围归一化到Colormap的0-1区间 temp_norm = plt.Normalize(min(Temp), max(Temp)) # 生成每个温度对应的颜色 temp_colors = current_cmap(temp_norm(Temp)) for k, (T, color) in enumerate(zip(Temp, temp_colors)): xs = np.linspace(t[0], t[-1], 1000) ys = model_funct(xs, *param[k][j]) # 绘制对应温度的拟合线 ax.plot(xs, ys, linestyle='dashed', color=color, alpha=0.7) # 绘制对应温度的实验散点 ax.scatter(t, R[k], s=0.5, color=color, label=f"Temp: {T}") # 添加颜色条,关联温度与当前Colormap color_bar = plt.cm.ScalarMappable(cmap=current_cmap, norm=temp_norm) color_bar.set_array([]) fig.colorbar(color_bar, ax=ax, label='Temperature') ax.set_title(f"Sensor {n} - Temperature vs Measurement") ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() # plt.savefig(f"{dir}\\Graphs\\{n}_hj.png") plt.show()
关键改动说明:
- 通过
plt.cm.get_cmap(cmap_list[j])循环调用列表中对应传感器的Colormap - 用
Normalize将温度范围映射到Colormap的标准区间,确保颜色与温度严格对应 - 添加颜色条(colorbar),直接展示当前传感器的温度范围与颜色的对应关系
- 修正原代码中重复绘制散点的逻辑,让每个温度对应一组独立的拟合线和散点
二、等高线图是否适合该场景?
分两种情况判断:
- 如果你的数据是二维空间分布类数据(比如传感器在不同空间位置,每个位置对应温度和测量值),等高线图(或填充等高线
contourf)非常适合,能清晰展现温度、测量值在空间上的分布规律。 - 如果你的数据是时间序列类数据(
t是时间,R是不同温度下的时间序列测量值),当前的散点+拟合线方式更直观,能清晰看到单温度下测量值随时间的变化趋势,以及模型拟合效果。这种场景下等高线图不适用,因为缺少二维空间维度支撑。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

