如何绘制带平滑插值(如克里金法)的属性分布图?
基于克里金法的平滑空间插值绘图实现
要解决三角插值过渡生硬的问题,克里金法是适配空间数据的平滑插值方案,以下是完整实现示例:
1. 依赖库安装(未安装时执行)
pip install pykrige scipy
2. 完整代码实现
import random import matplotlib.pyplot as plt import pandas as pd from pykrige.ok import OrdinaryKriging import numpy as np # 生成示例数据 plt.style.use('ggplot') fig = plt.figure(figsize=(16,8)) data = pd.DataFrame({"X":random.sample(range(530000, 560000), 60), "Y":random.sample(range(8580000, 8620000), 60), "PROPERTY":random.choices(range(0, 30), k=60)}) x = data["X"].values y = data["Y"].values z = data["PROPERTY"].values # 创建普通克里金模型 # variogram_model可选:'linear'/'power'/'gaussian'/'spherical',可按需调整 ok = OrdinaryKriging( x, y, z, variogram_model='gaussian', verbose=False, enable_plotting=False ) # 生成覆盖数据范围的插值网格,分辨率可调 grid_x = np.linspace(x.min(), x.max(), 100) grid_y = np.linspace(y.min(), y.max(), 100) # 执行克里金插值 z_interp, _ = ok.execute('grid', grid_x, grid_y) # 绘制平滑插值热力图 plt.contourf(grid_x, grid_y, z_interp, cmap='rainbow', levels=50) plt.colorbar(label='PROPERTY') # 叠加原始数据点 plt.scatter(x, y, color='black', s=50, edgecolor='white') plt.xlabel("X") plt.ylabel("Y") plt.title("克里金法平滑插值属性分布图") plt.show()
关键说明
- 模型选择:
variogram_model需匹配数据的空间相关性,高斯(gaussian)模型适配多数连续空间数据,若效果不佳可尝试球形(spherical)模型。 - 网格精度:
np.linspace的第三个参数控制网格密度,数值越大插值越精细,同时计算耗时会增加。 - 插值结果:
z_interp为平滑后的属性值网格,返回的第二个参数是插值方差,用于评估精度,无需时可忽略。
内容的提问来源于stack exchange,提问作者user026
相关产品推荐
相关产品推荐

