用 R + ggplot2 做地球化学常用投图(二元散点图 / 箱线图 / 三元图)的一套模块化脚本。 投图时只要在 Excel 里复制数据 → 在 R 里跑脚本 → PDF 自动打开。 所有共用配置(symbol 映射 / 配色 / 画布尺寸 / panel 主题等)集中管理,不同脚本零重复。
本仓库 不包含原始科研数据。所有 .xlsx / .csv 都在本地,已被 .gitignore 排除。
脚本通过剪贴板读取数据,不依赖任何具体数据文件。
geochem-plots/
├── plotting/ # 投图脚本(R)
│ ├── config_plot_shared.R # 所有图共用的配置(画布/配色/主题/panel label)
│ ├── utils_plot_shared.R # 所有图共用的工具函数(顶部有函数索引)
│ ├── 20260410__plot_binaryplot_modular.R # 二元散点图
│ ├── 20260410__plot_boxplots_modular.R # 箱线图 + 散点(交互式分组)
│ ├── 20260418__plot_ternaryplot.R # 三元图(手绘三角框,不依赖 ggtern)
│ └── legacy/ # 早期独立脚本归档(不再维护)
├── processing/ # 数据清洗 / 计算的 Python 脚本
├── outputs/ # 生成的 PDF(被 .gitignore 排除)
├── geochem-plots.Rproj # RStudio 项目入口(自动设置工作目录)
└── README.md
文件名前缀
20260410__:日期前缀(YYYYMMDD),表示该脚本的创建/重写时间,方便我自己版本管理。
- R ≥ 4.0
- RStudio(推荐用
geochem-plots.Rproj打开,工作目录会自动设置正确)
首次使用需要安装以下包:
install.packages(c(
"ggplot2", "scales",
"ggprism", # 主/次刻度线 + Prism 风格 guide
"ggh4x", # force_panelsizes 锁定 panel 物理尺寸
"ggrepel", # 散点图样品标签自动避让
"ggstar" # 扩展形状(symbol 26-41 用的星形/六边形等)
))脚本生成 PDF 后会自动用 SumatraPDF 打开, 不锁文件、热刷新——再次投同一张图,已开窗口会原地刷新而不是弹新窗口。
下载装到任一以下位置即可被自动找到:
%LOCALAPPDATA%\SumatraPDF\SumatraPDF.exe(默认 per-user 安装)C:\Program Files\SumatraPDF\SumatraPDF.exeC:\Program Files (x86)\SumatraPDF\SumatraPDF.exe
装到别处?在 config_plot_shared.R 里设:
sumatra_pdf_path <- "D:/Tools/SumatraPDF/SumatraPDF.exe"不想要这个功能?把 auto_open_pdf <- TRUE 改成 FALSE。
推荐 Spyder + 把项目文件夹关联为 .spyproject。
每张图的数据 = Excel 中的一个表格区域,必须包含以下列(列名严格大小写匹配):
| 列名 | 类型 | 说明 |
|---|---|---|
Colour |
整数 1-69 | 颜色编号,按位置取自配色表(前 49 同 GCDkit,50-69 为 SCI 扩展色) |
Symbol |
整数 0-41 | 形状编号,0-25 为 ggplot2 默认形状,26-41 为 ggstar 星形 |
Size |
数值 | 点的基础大小(可选,关闭 use_excel_size 时改用统一大小) |
| 你要画的变量列 | 数值 | 比如 Ta1 / CaO / MnO —— 列名必须与脚本里的 x_var / y_vars 完全一致 |
外加你想用作分组/标签的任何字符列(箱线图分组、散点标签等)。
打开 plotting/20260410__plot_binaryplot_modular.R,改顶部"Plot-specific config"区块:
x_var <- "Ta1" # X 轴变量
y_vars <- c("CaO", "FeO", "MnO") # Y 轴变量列表,会一次性出 3 张图
y_unit <- "wt.%" # 显示在 Y 轴标签括号里
use_log_x <- FALSE # 是否用对数轴复制 Excel 数据(含表头)→ 跑整个脚本 → PDF 出现在 outputs/,并自动打开。
打开 plotting/20260410__plot_boxplots_modular.R:
target_vars <- c("CaO","FeO","MnO","ThO2","UO2",...) # 想画哪些变量
y_unit <- "wt.%"
interactive_group_var <- TRUE # 启动时弹菜单选"用哪一列分组"
interactive_group_order <- TRUE # 启动时让你输入"组的显示顺序"跑脚本时控制台会问你:
- 用哪一列分组(菜单选择)
- 组的顺序(可输入编号
2 3 1或组名Type-A Type-B Type-C)
打开 plotting/20260418__plot_ternaryplot.R:
A <- "U.Pb" # 顶点
B <- "Na" # 左下
C <- "Ca" # 右下复制 Excel 数据 → 跑脚本 → PDF 出现。
打开 plotting/config_plot_shared.R,主要旋钮:
| 区块 | 控制什么 |
|---|---|
canvas_presets + active_canvas |
画布/panel 物理尺寸预设(default / box / wide_box),切预设改一行 |
auto_open_pdf |
是否生成 PDF 后自动用 SumatraPDF 打开 |
axis_* |
主刻度长度、数字与轴的间距、标题间距 |
use_excel_size / size_range |
点大小行为(用 Excel 列还是统一大小) |
panel_label_* |
左上角 A/B/C... 黑框 label 的字号/尺寸/颜色/视觉居中微调 |
default_shape_codes / custom_starshape_values |
symbol 编号 → 形状的映射表 |
工具函数都在 plotting/utils_plot_shared.R,文件顶部有完整函数索引。
想换全局画布尺寸:config_plot_shared.R 里 active_canvas <- "box"
panel label 字母看起来没居中:调 panel_label_optical_lift_mm
- 大写
A/B/C→0.09 - 小写
a/b/c或(a)/(b)→0.45
想关掉 PDF 自动打开:auto_open_pdf <- FALSE
Excel 里 Symbol 列填了未支持的编号:脚本会 warning + 列出哪些值无效 + 跳过这些点
- 每个 modular 脚本 = 该图独有的逻辑 + 顶部 20 行用户配置;
通用配置全部下沉到
config_plot_shared.R,工具函数下沉到utils_plot_shared.R。 - PDF 用 cairo_pdf 设备:中文字体、ggstar 形状、抗锯齿都比默认
pdf设备好。 - Panel 物理尺寸用
ggh4x::force_panelsizes锁定:保证不同图的 panel 视觉尺寸完全一致, 方便论文里横向比较。 - 三元图自己手绘三角框/网格/刻度:不依赖
ggtern,方便自定义刻度方向、顶点标签位置等。
Yaoqing Luo (罗耀清) — yaoqing.luo@cug.edu.cn 中国地质大学(武汉) / China University of Geosciences (Wuhan)