做水文地质调查、写水质分析报告,跟水化学数据打交道几乎是每天的必修课,而Piper三线图又是绕不开的那张图。不管你是要判断地下水的水化学类型、分析水岩作用的方向,还是想对比不同含水层、不同季节的水质差异,一张Piper图就能把一大堆阳离子、阴离子数据浓缩成几个点,直观又高效。我见过不少同行是用专业水文软件或者GIS插件来画,但真到自己改图、批量出图、投期刊的时候,Origin Pro 2023反而是最顺手的那把刀。这篇就用我实际项目的经验,从数据换算、模板调用、绘图细节到导出成品,手把手带你把Piper三线图搞定,末尾还附一套可以直接套用的数据模板和常见错误排查表,建议收藏。
1. 画图前必须想清楚:Piper三线图到底把什么塞进了坐标系
1.1 三个三角形加一块菱形,信息密度为什么这么高
Piper三线图的核心结构并不复杂,左边一个阳离子三角形,右边一个阴离子三角形,中间共用一块菱形区域。阳离子三角形通常用三个顶点表示Ca2+、Mg2+、Na+ + K+三组阳离子,阴离子三角形则用Cl-、SO42-、HCO3- + CO3^2-三组阴离子。每个水样会在阳离子三角里投一个点,在阴离子三角里投一个点,然后沿三角形内部特定方向的平行线投影到中间菱形里,最终落在菱形上的那个点,就是一个水样的综合水化学位置。
很多人第一次接触时觉得这个投影规则绕,我习惯这样理解:三角图本质上是一个三组分比例坐标系,它只关心“相对比例”,不关心绝对浓度。也就是说,不管你的水是TDS=200 mg/L的淡水,还是TDS=2000 mg/L的咸水,只要阳离子之间的比例关系相同,在阳离子三角图里就落在同一个位置。Piper图的妙处在于,它把“阳离子相对比例”和“阴离子相对比例”两组信息通过平行四边形法则叠加,最终在菱形里用一个点同时表达阴阳离子的相对构成。这样做的好处是,一张图可以同时回答三个问题:这个水样以什么阳离子为主、以什么阴离子为主、整体上属于什么水化学类型。
实际看图时也有经验可循。比如水样点如果落在菱形左侧中部,通常偏重碳酸型;落在右上角,往往是氯化钠型;如果偏向正上方接近Na-HCO3型,常见于受碱金属和碳酸盐共同控制的水体。这些区域判断并不难,难的是确保你投入图里的数据本身是对的,否则后续所有水化学类型命名都会失真。
1.2 毫克当量百分比是怎么来的:先学会这个计算再谈画图
这是整篇最容易翻车的地方,我必须把它放在最前面。Piper三线图里“比例”指的是毫克当量浓度(meq/L)的百分比,而不是毫克每升(mg/L)的占比。毫克每升是质量浓度,它只反映“重量占比”,但水里参与化学反应的其实是以“当量”为单位的量。举个简单的类比,同样是100 mg/L的钠离子和100 mg/L的钙离子,钙离子的电荷量是钠离子的两倍,若直接按质量占比画图,相当于无视了钙在水中的实际化学“分量”。
所以画图前必须把mg/L换算成meq/L,再算百分比。单离子换算公式是:
meq/L = mg/L × 离子价态 / 离子摩尔质量
对应的“当量质量”更方便日常使用,也就是1 meq/L相当于多少mg/L。常见离子的当量质量我整理在下面,建议直接存手机里:
| 离子 | 摩尔质量(g/mol) | 价态 | 当量质量(mg/meq) |
|---|---|---|---|
| Ca2+ | 40.08 | 2 | 20.04 |
| Mg2+ | 24.31 | 2 | 12.16 |
| Na+ | 22.99 | 1 | 22.99 |
| K+ | 39.10 | 1 | 39.10 |
| HCO3- | 61.02 | 1 | 61.02 |
| CO3^2- | 60.01 | 2 | 30.01 |
| SO4^2- | 96.06 | 2 | 48.03 |
| Cl- | 35.45 | 1 | 35.45 |
计算时,Ca的meq/L就是Ca mg/L除以20.04,Mg除以12.16,Na除以22.99,K除以39.10。这里有几个化学上的合并约定要特别注意:Na+和K+是碱金属,地球化学行为相似,Piper图惯例是合并为“Na+ + K+”作为一个端元;HCO3-和CO3^2-同属碳酸平衡体系,也合并为“HCO3- + CO3^2-”。合并的时候要先各自换算成meq/L再加和,因为碳酸根当量质量和碳酸氢根不一样,如果先按mg/L相加再换算,结果就是错的。
2. Origin Pro 2023里调用Piper图的几种办法
2.1 先检查软件里有没有内置模板
拿到Origin Pro 2023,很多人第一反应是翻菜单,但不同版本、不同安装方式,Piper图的入口可能不一样。最常见的路径是:打开一个工作表,先选中你的数据列,然后看菜单栏里的“绘图”(Plot)菜单,在“专业图”(Specialized)子菜单下是否能找到“Piper Diagram”或“Piper三线图”。如果能找到,说明当前版本自带Piper模板,点一下直接进入参数对话框,非常方便。
如果菜单里没有,也不用急着换软件。Origin 2023有个App Center(很多时候显示为窗口右侧的“Apps”按钮),在搜索框里输入“Piper”,会检索到一个由OriginLab官方或第三方开发者上传的“Piper Diagram”应用,点击安装即可。安装后可能需要重启一次Origin,再回到工作表的绘图菜单或“Apps”面板里就能看到它。这个App本质上是给软件补了一个专用绘图模板,和内置模板用法一样,只是入口不同。
还有一类情况是单位或学校用的是绿色版、精简版Origin,App Center连不上服务器。这时候可以找网络环境正常的同事帮忙,在Origin官网或官方App商店页面手动下载一个扩展包(通常是.opx后缀的文件),下载后在Origin里直接双击,或者通过菜单“文件→打开→选择.opx文件”导入安装。这个.opx安装方式比在线安装更稳,不用担心断线,而且不挑网络。装好之后重启软件,模板就到手了。
2.2 用模板之前,把工作表整理成它认识的格式
调用模板之前,数据表结构才是关键。Piper Diagram这类模板不会理解你脑子里的化学逻辑,它只按列读取数字。我做项目时习惯这样设计工作表,这个格式在多个版本里都通用:
| 样品编号 | Ca% | Mg% | Na+K% | HCO3+CO3% | SO4% | Cl% | 水样类型 |
|---|---|---|---|---|---|---|---|
| S01 | 49.3 | 24.4 | 26.3 | 57.7 | 14.1 | 28.2 | 浅层地下水 |
| S02 | ... | ... | ... | ... | ... | ... | ... |
模板通常不关心原始mg/L浓度,它只认最终的阴阳离子相对百分比。部分新版本模板也支持你直接填入原始浓度,再通过对话框选择“自动换算”,但我还是建议你在Excel或Origin的数据表里先把百分比算好再画。原因是自动换算在不同模板里的规则差异很大,有的要求你先输入meq/L,有的要求输入%分比,还有的要求输入0到1之间的小数比例。万一你输入的是mg/L而模板默认按meq/L处理,图面上所有点都会朝着某一两个顶点方向挤过去,而且这种错误乍一看并不明显,很容易被忽略。
另外,工作表的第一列建议放样品编号这类文本标识列,后面紧接着放阳离子百分比列,再放阴离子百分比列。最后一列可以放分组信息(比如含水层类型、采样季节、井号等),用于后面设置颜色和符号。画图时,模板一般会弹出对话框让你分别指定阳离子数据范围、阴离子数据范围和分组列范围,所以列的顺序并不强求,只要你能在对话框里清晰对应即可。
2.3 最稳妥的绘制步骤(附界面细节)
最常规的绘制流程如下:
- 在工作表里选中已换算好的百分比数据列(阳离子、阴离子都选中)。
- 点击“绘图→专业图→Piper Diagram”,或者在Apps面板里点击已安装的“Piper Diagram”。
- 如果弹出了绘图设置对话框,通常会有两个或三个输入框:一个指定阳离子三组数据列,一个指定阴离子三组数据列,还有可能有一个指定符号映射列。按提示把对应列选进去就行。
- 点击OK或Preview,Origin会在当前项目里生成一个新的图层,内容就是完整的Piper三线图框架加上你的散点。
- 生成后,右键单击图形,选择“绘图细节”(Plot Details),可以调整点的形状、大小、颜色、透明度,也可以调整三角图边框线宽、菱形位置等。
这里有个细节:如果你没有提前选中任何数据列,直接点菜单,模板或许会自动创建一个空图,然后你需要通过“图层内容”对话框手动将数据列指定进去。选中列再绘图的好处是减少后期手动关联的麻烦。实际项目里,我通常习惯一次性把所有需要画图的数据都排在同一张工作表的连续列里,这样选中、绘制、校核一气呵成,尤其是几十个点的大数据量,效率差距非常明显。
3. 把默认图改成像专业报告里那样的成品
3.1 坐标轴、刻度、标签的常规优化
Origin默认生成的Piper图其实很朴素,直接放进论文或者评审PPT里可能不够好看,但修改起来也不复杂。首先要检查的是三角图的刻度方向。Piper图里三角形每条边的0%起点和100%终点位置是有固定的化学约定,如果模板生成的刻度方向和你的预期相反,可以在“坐标轴”设置里选择“反向”,或者检查模板自带的轴设置。一般新版本模板不会犯这种低级错误,但如果你用的是某些旧版本第三方模板,经常要手动把坐标轴刻度翻转,这个我实测踩过坑。
然后是字体和字号。默认图表的英文刻度标签在中文报告里会显得突兀,最好统一改成项目要求的字体,比如“宋体”或“Arial”,字号统一在10到12磅之间。操作路径是:双击坐标轴刻度标签,或者在图表上右键选择“坐标轴属性”,在“刻度标签”标签页里修改字体属性。菱形图正上方的“Piper Diagram”标题也可以删掉或者改成自己的图题,避免出现模板自带的英文标题。
网格线也是一个容易忽略的点。默认状态下菱形内部可能没有网格线或只有极浅的网格,像这种浓度三角图,有参考网格线能大幅提升可读性。我一般会打开“网格”设置,把主网格线的样式改成虚线,颜色设为灰色,让网格线淡淡地垫在点下面。这样既能看到点的分布,又不会喧宾夺主。
3.2 用分组列区分不同水样来源、层位或季节
实际项目很少只画一个水样,往往是十几个、几十个点放在同一张图上,如果全部用同一个颜色、同一种符号,那图就成了一团乱麻。Origin的Piper图最实用的功能之一就是支持按分组列自动设置颜色和形状。做法是:在“图层内容”对话框里找到你的绘图数据那一层,把刚才数据表里的“水样类型”或“含水层”列指定为“符号颜色”和“符号形状”的映射列。
设置完成后,每个分组会获得不同的颜色和点形状,绘图区会自动生成一个图例。后期如果觉得默认配色难看,可以在“绘图细节→符号”里修改颜色列表,比如把“浅层地下水”设为蓝色圆形、“深层地下水”设为红色三角形、“基岩裂隙水”设为绿色菱形。建议尽量选色盲友好的配色组合,比如蓝、橙、绿、灰,尽量避免红绿撞色,这样投期刊或评审时也更专业。
还有一个小技巧:如果分组比较多,默认图例堆在右下角会遮挡菱形区域。可以在图例上右键选择“属性”,把图例的摆放位置调整到图形外的空白处,或者改成横向排列。期刊排版时,我经常把图例单独拿出去放标题下方或者图外,保证图区本身干净。
3.3 导出高质量图片:给论文、评审、PPT用
图做完之后就是导出。Origin最大的优势之一就是导出选项非常细。我建议养成这样的习惯:先保存一个.opju工程文件,再用“文件→导出图形”来输出不同用途的图片。投期刊一般要求TIF格式、300 dpi以上,部分编辑部会要求600 dpi,导出时在“图像设置”里把分辨率设成300或600,压缩方式选LZW,颜色模式根据期刊要求选RGB或CMYK。
如果是做汇报PPT,导出一张PNG就够用了,PNG在屏幕上显示清晰且文件体积适中。如果是矢量化排版,可以导出PDF或EPS,后续在AI或CorelDRAW里继续编辑单个点、图例、注记,都不会损失清晰度。这里提醒一句:不要直接把Origin图复制粘贴到Word里就算完事,一旦后续期刊要求改分辨率或颜色模式,重新导出更麻烦,前期养成规范导出习惯能省一半改稿时间。
4. 一张可以直接“抄作业”的数据模板与计算示例
4.1 模板表长什么样
我的数据模板长这样,它整合了原始浓度、换算结果和分组信息。你拿到后只要把自己的数据填进去,红色部分(换算列)用公式自动生成即可:
| 样品编号 | Ca mg/L | Mg mg/L | Na mg/L | K mg/L | HCO3 mg/L | CO3 mg/L | SO4 mg/L | Cl mg/L | Ca% | Mg% | Na+K% | HCO3+CO3% | SO4% | Cl% | 分组 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| S01 | 80.0 | 24.0 | 46.0 | 5.0 | 250.0 | 0.0 | 48.0 | 71.0 | 49.3 | 24.4 | 26.3 | 57.7 | 14.1 | 28.2 | 浅层 |
| S02 | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
表格里前面的原始浓度来自水质分析报告,后面的百分比由中间计算得到。我给每列都加了单位,这一步非常关键——单位一旦写清楚,后面校验数据、和别人对数据都不会因为“这列到底是mg/L还是meq/L”起争执。
4.2 从实测mg/L到meq%的完整演算
拿上面S01那一行做一个完整的演算过程。假设某水样实测结果为:Ca = 80.0 mg/L,Mg = 24.0 mg/L,Na = 46.0 mg/L,K = 5.0 mg/L,HCO3 = 250.0 mg/L,CO3 = 0 mg/L,SO4 = 48.0 mg/L,Cl = 71.0 mg/L。
先换算成meq/L。Ca的meq/L = 80.0 / 20.04 = 3.992;Mg的meq/L = 24.0 / 12.16 = 1.974;Na的meq/L = 46.0 / 22.99 = 2.001;K的meq/L = 5.0 / 39.10 = 0.128。所以Na+K合计 = 2.001 + 0.128 = 2.129,阳离子总meq/L = 3.992 + 1.974 + 2.129 = 8.095。于是Ca% = 3.992 / 8.095 × 100 = 49.3%,Mg% = 1.974 / 8.095 × 100 = 24.4%,Na+K% = 2.129 / 8.095 × 100 = 26.3%。
阴离子同理:HCO3的meq/L = 250.0 / 61.02 = 4.097;CO3 = 0;SO4的meq/L = 48.0 / 48.03 = 0.999;Cl的meq/L = 71.0 / 35.45 = 2.003。阴离子合计 = 4.097 + 0.999 + 2.003 = 7.099。HCO3+CO3% = 4.097 / 7.099 × 100 = 57.7%,SO4% = 0.999 / 7.099 × 100 = 14.1%,Cl% = 2.003 / 7.099 × 100 = 28.2%。
这些百分比总和应该等于100(允许小数点后一位的四舍五入误差)。这样算出来的水样在Piper图里应落在菱形左中偏下,水化学类型可以初步判定为Ca-Mg-HCO3类型水,这和计算结果高度吻合。把这一套演算过程在Excel里用公式固定下来,后续几十个样品只要拖拽填充就行。
4.3 我见过最多的换算翻车现场
关于这个换算,我见过太多同行栽在同一个坑里。最常见的错误是直接拿mg/L的比值去画图。有些做工程出身的同事图省事,在Excel里直接算“Ca/(Ca+Mg+Na+K)”,单位还是mg/L,画出来的图点全部往Ca端和HCO3端偏移,Ca-HCO3型水直接挤到了菱形的边界上,看起来好像也有规律,但实际完全不能用于水化学类型判定。另一个容易出错的地方是碳酸根没合并或合并方式不对。很多水质报告里HCO3和CO3是分开的,画图时如果只填了HCO3而忽略CO3,阴离子比例就偏低,点会向左偏移;如果先按mg/L相加再换算当量,也会导致比例偏差。正确做法一定要先把HCO3和CO3各自换算成meq/L再加和。
还有一种情况是Na和K分开画,但模板只留了一个Na+K端元列,于是有人直接把K那一列放在旁边不管,结果钠钾比例严重失真。记住,在Piper图里Na+K是一个整体端元,无论K浓度是高是低,都要先各自换算成meq/L再合并。
5. 高频问题与排错思路
5.1 点都挤在一起或跑偏,先查这三件事
如果你辛辛苦苦画出来,发现所有点都挤在三角形某个顶点附近,或者干脆跑到了菱形外,先别急着怀疑模板坏了。绝大多数情况是数据换算或列选择出了问题。第一步检查数据百分比是否合理:任一离子百分比不应超过100,且每组阴阳离子百分比合计应为100左右。如果数值在0.0几到0.几之间,说明你填的是小数比例,而模板可能默认按百分数读取,需要乘以100或检查对话框设置。第二步检查列对应关系:看看是不是把阳离子列选成了阴离子,或者Na+K列选成了单独的Na列、K列。第三步检查数据范围是否包含了表头文本,尤其是用老版本模板时,如果数据范围内混入文本,Origin会自动把整列当文本处理,图就什么都不显示。
如果点确实在菱形内部,但分布看起来不对,就对照本文第4.2节的标准算例,把S01这一组数据按模板画出来,理论上应该得到一个确定的位置。如果这个已知样都点不对,那就是数据或模板的问题,而不是你的样品问题。
5.2 怎么验证图没画错?用一个已知水样对坐标
这是我最推荐的验证方法:拿到一组已知水化学类型的水样数据,先手动算好它的理论落区,再画进图里看是否对得上。下面给一个快速自检表:
| 水化学类型 | 阳离子特征 | 阴离子特征 | 菱形落区 |
|---|---|---|---|
| Ca-HCO3型 | Ca占比高 | HCO3占比高 | 菱形左下偏中 |
| Na-Cl型 | Na+K占比高 | Cl占比高 | 菱形右上角 |
| Na-HCO3型 | Na+K占比高 | HCO3占比高 | 菱形左上角 |
| Ca-SO4型 | Ca占比高 | SO4占比高 | 菱形右下偏中 |
用你实际项目里已知地下水类型的那几个常规点做校验,比漫无目的地盯着大屏幕发呆高效得多。我通常在整理完一批数据后,会先挑3个代表性样品做一次快速计算、画图、验证,确认无误后再批量导入其余样品点。这个习惯帮我避免过好几次批量错图的惨案。
5.3 软件版本和模板插件带来的差异
Origin Pro 2023虽然整体比旧版好用,但不同构建版本、不同安装环境下Piper图的细节还是有一些差异。如果你在App Center里搜Piper,可能会看到好几个相似的应用,选择时优先看下载量和评分,最好选择官方发布的那个。安装完第一次使用,可以顺手打开模板自带的示例数据,画一张默认图,确认软件环境和模板本身都没问题。这相当于给绘图环境做一个“开机自检”,成本很低,但能排除很多后续麻烦。
遇到菜单里没有Piper选项、App Center又无法安装的时候,还有一条路:用Origin的“绘图→专业图→三元图”先分别画阳离子三角图和阴离子三角图,再手动把两个三角图的投影做出来拼成菱形。这个方法非常原始且费时,但胜在不受模板限制。对于偶尔画一两次Piper图、又实在装不上模板的朋友,它是一条保底方案。不过如果你经常要画水化学图件,我还是建议花点时间把Piper Diagram模板装好。
5.4 缺失值和未检出项怎么处理
水质分析数据里常有“未检出”或低于检出限的情况。我的建议是:未检出的离子按0处理,不要留空,也不要填一个很小的随机数。0在比例计算里是合法的,它表示这种离子在水中的含量可忽略;但如果留空,Origin会把整行数据当作缺失值,点在图上可能完全不显示。反过来,如果样品只有很少几个离子被测出,比如只有钙和氯有数,其他都缺失,那这种样品从化学上就不适合做Piper图,建议直接剔除或换用其他图示方法。Piper图要的是完整的阳离子和阴离子主成分数据,缺了任何一块,比例都会失真得厉害。
关于空白单元格,还要提醒一句:Excel里用空单元格表示0,导入Origin后会显示为缺失值,绘图时可能被跳过。最好的做法是在Excel阶段就把空单元格替换成数值0,并确保整列数据格式统一为“数值”,这样到了Origin里就不会出现“该列含非数值数据”之类的报错。
最后再分享一个特别实用的小习惯。我每次画完Piper图,并不会马上关掉工程,而是会顺便把图导出成一个PDF版本存档,再把参与计算的数据模板另存一份CSV。这样即使半年后论文返修要改一个点的颜色、加一组新样品,我只要打开原始.opju工程,更新数据表,图会自动重绘,再导出新图即可。整个过程不到五分钟,比重新整理数据、虚线、调色再画一张快太多。这个工作流我用了很久,希望对你有用。