在 PGFPLOT 中记录颜色条/元数据

在 PGFPLOT 中记录颜色条/元数据

我正在尝试使用 pgfplots 创建带有颜色图的 2D 图。我设法获得了我想要的整体行为,但我希望颜色图是对数的,而不是线性的。我所能做到的最好方法是使用 meta expr 键,但颜色条显示 1-4,而不是 10^1 到 10^4。以下是我的工作示例。

\begin{tikzpicture}
\begin{semilogyaxis}[colorbar,
xlabel = create energy (keV),
ylabel = deposit energy (kev),
]
\pgfplotstableread{../endep_log_au_30_0_0.csv}\mytable %
\addplot+[scatter, only marks, scatter src=explicit, mark=square]
 table[x=createEn,y=depEn,meta expr=ln(\thisrow{tot})/ln(10)] {\mytable};
\end{semilogyaxis}
\end{tikzpicture}

有没有办法修改标签在颜色栏上的显示方式或将其设置为对数?我可以用其他方法解决这个问题吗?

(遗憾的是,作为新用户我无法发布图片)

答案1

这种meta expr方法很好。为了正确获取颜色栏上的标签,您可以设置\yticklabel=\pgfmathparse{10^\tick}\pgfmathprintnumber{\pgfmathresult}颜色栏 - 颜色栏是完整axis环境,因此它们具有“正常”图可用的所有选项。您可以使用以下方式设置颜色栏的选项colorbar style={<options>}

带对数颜色条的 pgfplots

\documentclass{article}

\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}

% Define new pgfmath function for the logarithm to base 10 that also works with fpu library
\pgfmathdeclarefunction{lg10}{1}{%
    \pgfmathparse{ln(#1)/ln(10)}%
}

\pgfplotstableread{
createEn depEn tot
0 5 1
0.1 20 10
0.5 100 100
2 10300 1000
}\mytable %


\begin{tikzpicture}
\begin{semilogyaxis}[
    xlabel = create energy (keV),
    ylabel = deposit energy (keV),
    colorbar,
    colorbar style={yticklabel=\pgfmathparse{10^\tick}\pgfmathprintnumber\pgfmathresult}
]

\addplot+[scatter, only marks, scatter src=explicit, mark=square]
 table[meta expr=lg10(\thisrow{tot})] {\mytable};
\end{semilogyaxis}
\end{tikzpicture}


\end{document}

相关内容