实战:用Pyrolite分析你的土壤数据,5分钟生成带分类的质地三角散点图

📅 2026/7/25 5:45:46 👁️ 阅读次数 📝 编程学习
实战:用Pyrolite分析你的土壤数据,5分钟生成带分类的质地三角散点图

实战:用Pyrolite分析你的土壤数据,5分钟生成带分类的质地三角散点图

当你拿到一份土壤成分检测报告,面对密密麻麻的沙粒、粉粒和黏土百分比数据时,是否想过这些数字背后隐藏着怎样的土壤特性?传统的人工比对土壤质地分类表不仅耗时费力,还容易出错。现在,借助Python生态中的pyrolite工具库,我们能够实现从原始数据到可视化分析的全流程自动化——更重要的是,它能直接告诉你每个样本点属于哪种USDA标准土壤类型。

1. 环境准备与数据清洗

在开始绘制三角图之前,需要确保你的Python环境已安装必要的库。推荐使用conda创建独立环境以避免依赖冲突:

conda create -n soil_analysis python=3.9 conda activate soil_analysis pip install pyrolite pandas matplotlib numpy

典型的实验室土壤检测数据可能包含多余列或非标准化命名。假设我们有一个soil_samples.csv文件,其内容结构如下:

SampleIDClay_PCTSand_PCTSilt_PCTpHOrganic_Matter
S132.141.526.46.22.8
S218.765.216.15.81.5

使用pandas进行数据预处理时,需要特别注意三点:

  1. 确保三组分百分比之和为100±0.5%(允许微小浮点误差)
  2. 将列名统一为Clay,Sand,Silt的规范格式
  3. 过滤掉含有缺失值的记录
import pandas as pd df = pd.read_csv('soil_samples.csv') # 列名标准化 df = df.rename(columns={'Clay_PCT':'Clay', 'Sand_PCT':'Sand', 'Silt_PCT':'Silt'}) # 验证数据完整性 assert all(df[['Clay','Sand','Silt']].sum(axis=1).between(99.5,100.5))

2. 构建基础三角坐标系

pyroliteUSDASoilTexture类封装了美国农业部标准的土壤分类系统。初始化分类器时会自动加载12种标准质地类型的多边形边界:

from pyrolite.util.classification import USDASoilTexture import matplotlib.pyplot as plt clf = USDASoilTexture() fig, ax = plt.subplots(figsize=(10, 8)) ax = clf.add_to_axes(ax=ax, add_labels=True)

关键参数说明:

  • figsize: 控制图形长宽比,建议保持1:1比例
  • add_labels: 显示各区域的类型标签
  • edgecolor: 修改分类区域边界线颜色
  • zorder: 控制图层叠加顺序

此时运行代码会显示一个空白的三角坐标系,三个顶点分别代表:

  • 底部右侧:100% Sand(砂粒)
  • 顶部顶点:100% Clay(黏土)
  • 底部左侧:100% Silt(粉粒)

3. 数据投影与自动分类

将清洗后的数据投影到三角图上时,pyrolite提供了两种可视化方式:

3.1 散点图展示样本分布

使用DataFrame特有的pyroplot接口可以直接绘制三元散点图:

df.pyroplot.scatter( ax=ax, c='#FF6B6B', # 点颜色 s=50, # 点大小 edgecolor='white', label='Field Samples' )

3.2 实时分类标注

更强大的功能在于自动判断每个点的土壤类型。分类器的predict()方法会返回每个样本对应的USDA类型:

classes = clf.predict(df[['Clay', 'Sand', 'Silt']].values) df['SoilType'] = classes # 在图上添加类型标注 for i, row in df.iterrows(): ax.text(row['Sand'], row['Clay'], row['SoilType'], ha='center', va='center', fontsize=8)

常见输出类型包括:

  • Sandy Loam(砂质壤土)
  • Clay Loam(黏壤土)
  • Silty Clay(粉质黏土)
  • Loam(壤土)

4. 高级定制与输出优化

基础图形往往需要进一步美化才能用于专业报告。以下是三个提升可视化效果的技巧:

4.1 区域颜色自定义

from pyrolite.util.plot.style import color_ternary_polygons_by_centroid color_ternary_polygons_by_centroid( ax, colors=("#F8F3D4", "#F7DBF0", "#CDF0EA"), # 自定义色系 alpha=0.6 # 透明度 )

4.2 添加辅助网格线

ax.grid(which='both', linestyle=':', alpha=0.5) ax.tick_params(axis='both', which='major', labelsize=9)

4.3 导出出版级图片

fig.savefig('soil_texture_analysis.png', dpi=300, bbox_inches='tight', transparent=True)

5. 实际应用案例解析

某农场在20个不同位置采集土壤样本,检测数据如下表所示:

样本点Clay (%)Sand (%)Silt (%)实际用途
A122.362.115.6玉米田
B335.832.431.8蔬菜大棚
C218.270.511.3果树种植区

分析发现:

  1. 玉米田土壤属于Sandy Clay Loam(砂质黏壤土),保水性较差
  2. 大棚土壤是典型的Clay Loam(黏壤土),适合根系发达的蔬菜
  3. 果树区为Loamy Sand(壤砂土),需要增加有机质改良

基于此分析,农艺师制定了差异化的施肥方案:

  • 玉米田:增加保水剂和缓释肥
  • 蔬菜大棚:补充钙镁等中量元素
  • 果树区:施用腐熟有机肥改善结构