我正在尝试使用 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>}
:
\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}