如何利用x轴距离、z轴深度与饱和度创建蓝色梯度热力图
新手入门:基于饱和度的深度-距离热力图实现
准备工作
先确保你安装了matplotlib和numpy,打开终端输入:
pip install matplotlib numpy
完整实现代码
下面是可直接运行的示例代码,包含数据生成、颜色配置和绘图:
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap # 1. 生成示例数据(替换成你的真实数据即可) # x方向距离:0到100米,取50个采样点 x = np.linspace(0, 100, 50) # z方向深度:0到50米(数值越大代表深度越深),取30个采样点 z = np.linspace(0, 50, 30) # 创建x和z的网格矩阵 X, Z = np.meshgrid(x, z) # 生成模拟的饱和度值(0-100%),用正弦函数生成渐变效果 saturation = 50 + 50 * np.sin(X/20 + Z/10) # 确保饱和度值被限制在0-100范围内 saturation = np.clip(saturation, 0, 100) # 2. 自定义蓝色渐变映射:10个等级对应10个饱和度区间 # 从最深蓝到最浅蓝的10种颜色(十六进制码) blue_shades = [ '#000080', '#0000A0', '#0000C0', '#0000E0', '#1010FF', '#3030FF', '#5050FF', '#7070FF', '#9090FF', '#B0B0FF' ] # 创建分段颜色映射 cmap = LinearSegmentedColormap.from_list("saturation_blue", blue_shades, N=10) # 3. 绘制热力图 plt.figure(figsize=(10, 6)) # 用pcolormesh绘制网格热力图,传入x、z网格和饱和度数据 heatmap = plt.pcolormesh(X, Z, saturation, cmap=cmap, vmin=0, vmax=100) # 设置坐标轴标签 plt.xlabel('X方向距离 (米)') plt.ylabel('深度 (米)') # 反转y轴,让深度大的区域显示在图表下方(符合常规认知) plt.gca().invert_yaxis() # 添加颜色条,设置刻度对应10个饱和度区间 cbar = plt.colorbar(heatmap, ticks=np.arange(0, 101, 10)) cbar.set_label('饱和度 (%)') # 给颜色条刻度添加区间标签 cbar.set_ticklabels([ '0-10', '10-20', '20-30', '30-40', '40-50', '50-60', '60-70', '70-80', '80-90', '90-100' ]) # 添加图表标题 plt.title('深度-距离饱和度热力图') # 显示图形 plt.show()
关键部分解释
- 数据替换:如果有真实的CSV/Excel数据,用
pandas读取后替换示例数据部分即可(比如pd.read_csv("your_data.csv")提取x、z、saturation列)。 - 颜色配置:
blue_shades列表里的十六进制颜色可自行调整,只要保持从深到浅的蓝色渐变,就能匹配饱和度区间。 - 坐标轴调整:
invert_yaxis()是为了让深度数值越大,位置越靠下,符合现实中“深度向下增加”的逻辑。
扩展提示
- 如果你的数据是离散点(非规则网格),可以改用
plt.tricontourf绘制不规则热力图。 - 调整
figsize参数可以改变图表的整体尺寸。
内容的提问来源于stack exchange,提问作者musert
相关产品推荐
相关产品推荐

