EIS/DRT 热力图

当你做了一组原位 EIS(不同电位/不同时间点)或一系列样品(不同条件、不同浓度)的 DRT 分析后,把所有样品的 γ(τ) 折线挤在一张图上往往很难读。这个 Workflow 把它们拼成一张 τ–样品 维度的热力图,用颜色直观展示某个弛豫过程在不同条件下的强度演化。
前置条件
可以二选一作为输入:
- EIS/DRT 分析 输出的
drt_output/目录(已计算好 DRT 的样品集合) - EIS 提取: 辰华仪器 或 EIS 提取: 东华原位 EIS 输出的
*_eis.csv目录(程序会先自动跑一遍 DRT 再绘图)
至少需要 2 个样品。
操作步骤
只需选择一个目录。程序会自动:
- 检测目录类型(
drt_output/还是*_eis.csv) - 必要时调用 DRT 求解,并把每个样品的
drt_data.csv缓存到drt_heatmap/drt_output/<sample>/ - 对所有样品取 τ 范围交集,建立 200 点的对数公共网格,对 γ(τ) 在 log-τ 上做线性插值
- 对样品名做自然排序
Y 轴启发式说明:
- 若所有样品名末尾都能抽出整数,且这些整数两两不同(如
in_situ_001、in_situ_002…),则 Y 轴模式为index,用这些整数作为 Y 数值,标签为Sample Index - 否则回退为
ordinal模式,Y 数值为1..N,Y 刻度标签使用样品名(在 Origin 中尝试通过 LabTalk 注入;若失败则回退为数值刻度并打印提示)
终端会打印当前使用的模式,便于排查。
输出
drt_heatmap.png:matplotlib 版热力图,X 轴为 τ(log 坐标),Y 轴按启发式确定drt_heatmap.opju:Origin 工程,这是后续可二次编辑的主要产物。X 轴存的是log₁₀τ数值(轴标签会写成log₁₀τ),这样便于在 Origin 里继续编辑而不会和"看似 log 实际线性分布"的格子错位drt_heatmap_clipped.png/drt_heatmap_clipped.opju:截峰版热力图。DRT 结果常存在一个远高于其他特征的主峰,会把色标拉得很大、淹没所有次要弛豫过程。这两个文件会把色标上限钳制在"次强峰高度的 120%"(用scipy.signal.find_peaks在每个样品的 γ(τ) 上寻峰,取所有样品里最高的次强峰,再乘 1.2),高于该阈值的格子统一用色标顶端的颜色显示。两份输出和原始drt_heatmap.*同时给出,可以互相对照。如果所有样品都只有 1 个峰,则会跳过截峰版本并打印提示drt_heatmap_matrix.csv:插值后的 γ 矩阵(未截峰),第一列样品名,第二列 Y 数值,其余列以 τ 为表头samples_meta.json:记录y_mode、y_label、input_kind与样品-Y 数值映射
eis_csvs 输入模式还会在 drt_heatmap/drt_output/<sample>/drt_data.csv 落盘 DRT 中间结果,方便复用。
原理(简要)
将每个样品的 γ(τ) 排布到统一的对数 τ 网格上,得到矩阵 ,其中 标记样品(Y 维度), 标记 τ(X 维度)。热力图把 用颜色表示,可以一眼看出:
- 某个弛豫过程对应的峰随条件(电位/时间)如何沿 τ 移动
- 不同样品间峰强度的相对变化
常见问题
- 为什么提示 “tau 范围无重叠”? 不同样品的频率范围如果完全错开,公共 τ 网格无法构建。请检查输入数据的
freq_hz列。 - 样品顺序怎么定? 自然排序:
sample_001 < sample_002 < sample_010。如果你不希望按名称排序,请提前重命名。 - Origin 自定义 Y 刻度失败怎么办? 程序会捕获异常并回退为数值刻度,opju 仍可正常打开,只是 Y 轴显示
1, 2, 3, ...而非样品名。
实用建议
如果你做的是原位 EIS(按时间或电位采样),建议样品名带上严格递增的整数序号(如 _001、_002),这样 Y 轴会自动用这些序号做坐标,便于和其他原位曲线对照。