You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在TikZ中为自定义图例使用指数颜色渐变的问题

颜色轴指数渐变及图例调用问题解决方案

核心思路

要实现指数渐变的颜色轴,无需在\addlegend中直接调用自定义函数,而是通过注册全局可调用的PGF数学函数,结合pgfplots的颜色映射配置实现,同时让图例自动适配该指数映射。

具体操作步骤

  • 注册自定义指数函数:使用\pgfmathdeclarefunction将你的colorcalc函数注册为PGF全局可用的数学函数,确保pgfplots的颜色轴和图例都能识别。
  • 配置颜色轴指数映射:在axis环境中,通过point meta={colorcalc(\thisrow{z})}指定颜色的计算逻辑,基于原始数据的z值生成指数转换后的颜色元数据。
  • 适配图例/颜色轴刻度:通过colorbar style中的yticklabel配置,让颜色轴刻度显示原始数值,而非指数转换后的值,提升可读性。

修改后的可运行代码

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}

% 注册自定义指数函数,示例为自然指数变换,可根据需求替换逻辑
\pgfmathdeclarefunction{colorcalc}{1}{%
  \pgfmathparse{exp(#1)}% 替换为你的指数计算,如log1p(#1)或自定义渐变逻辑
}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
  scatter/use mapped color={draw=mapped color, fill=mapped color!50},
  scatter,
  colorbar,
  % 指定颜色元数据使用自定义指数函数计算
  point meta={colorcalc(\thisrow{z})},
  % 配置颜色轴刻度显示原始z值(反函数转换)
  colorbar style={
    yticklabel={\pgfmathparse{ln(\tick)}\pgfmathprintnumber[fixed, precision=2]{\pgfmathresult}},
    ylabel={原始Z值}
  },
  xlabel={X},
  ylabel={Y},
]
% 模拟接近0的测试数据
\addplot[scatter] table {
x y z
0 0 0.01
0 1 0.05
1 0 0.1
1 1 0.5
2 0 1.0
2 1 2.0
};
% 图例自动适配颜色映射,无需额外调用自定义函数
\addlegendentry{数据点}
\end{axis}
\end{tikzpicture}
\end{document}

关键细节说明

  • 若你的colorcalc是其他指数逻辑(如log1p(z)),只需同步修改colorbar style中的反函数(如exp(\tick)-1),确保刻度显示对应原始值。
  • 若无需显示原始值,可删除colorbar style中的yticklabel配置,直接展示指数转换后的数值。
  • 确保pgfplots的compat版本不低于1.10,避免语法兼容性问题。

内容的提问来源于stack exchange,提问作者NoraTheExplorer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:47:55