R语言导入Excel数据绘制颗粒形状三角图的方法与问题解决
R语言绘制Graham & Midgley沉积颗粒形状三角图实现方案
基础需求
- 数据源:多份存储沉积颗粒测量数据的Excel表格,包含字段为a轴长度、b轴长度、c轴长度、岩性(lithology)、磨圆度(roundness)
- 目标图件规则(与原Excel生成的Graham & Midgley颗粒形状三角图一致):
- 左侧刻度对应c:a轴长比值
- 右侧刻度对应b:a轴长比值
- 底边刻度对应(a-b)/(a-c)比值
- 可视化要求:按岩性对数据点做颜色编码、按颗粒平均尺寸映射点大小、支持灵活调整图件格式
实现过程踩坑记录
- 导入数据类型异常:使用
readxl包读取Excel数据时,a.axis、b.axis、c.axis三个轴长字段会被识别为字符型,无法直接开展数值计算,需要提前做类型转换。 - 缺失值触发警告:数据中存在的NA缺失值会被
ggplot2的geom_point散点图层自动剔除,默认触发Removed rows containing missing values警告,绘图前可提前过滤空值避免冗余提示。 - 三元图包适配错误:初期尝试调用
ggtern包按常规三元闭合逻辑绘图,发现该类颗粒形状图仅外观与三元图相似,不属于标准三元图:无需满足三组分和为1的闭合要求,直接通过固定公式将轴长数据转换为平面直角XY坐标后绘图即可还原样式。
坐标转换规则:
- 先计算两个基础比值:
c_a = c轴长度 / a轴长度、b_a = b轴长度 / a轴长度- X坐标计算公式:
1 - b_a + 0.5 * c_a- Y坐标计算公式:
c_a * 0.866 * 打印校正系数
绘图逻辑:过滤空值后在XY散点图层上叠加三角形边框、对应轴刻度标注即可,无需依赖三元图专用包。
最终可用流程
基于readxl、dplyr、ggplot2三个包搭建的处理流可实现全流程自动化:
- 支持交互式点选目标Excel文件
- 自动统一不同来源表格的列名规范
- 自动将三轴长度字段转换为数值型
- 按给定公式批量计算图件映射坐标
- 绘制散点图层:颜色映射岩性字段、点大小映射a轴尺寸(表征颗粒平均大小)
- 自动叠加三角形边框、对应轴标签与刻度
- 自动读取导入的文件名称作为图题
- 自动将成图导出为JPG格式存储
待优化细节:增加文件名后缀自动去除逻辑、自定义岩性配色映射表,即可完全满足日常使用需求。
内容的提问来源于stack exchange,提问作者Liz L
相关产品推荐
相关产品推荐

