pgfplot 数字格式:刻度上的科学计数法,不含因子 1

pgfplot 数字格式:刻度上的科学计数法,不含因子 1

我有一个 pgfplot,它应该只给我一个颜色条,没有其他图。我的代码灵感来自这个问题。对数色条代码来自这个答案这个答案

我得到的结果是尊重:我想要 10 的所有幂的刻度,写成 ( 10^n)而不是普通的小数。另外,我不希望1*在刻度前面出现多余的数字(就像现在的 10^5 一样)。

我迄今为止的输出(请执行故障渲染):
错误的勾选

我的 MWE:

\documentclass{standalone}

\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}

\begin{filecontents}{data.csv}
height,width
1,2
205241,3
205241,0
\end{filecontents}

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

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ymode=log,
    enlargelimits=false,
    hide axis,
    scale only axis,
    height=0,
    width=0,
    colorbar horizontal,
    colorbar style={
        width=10cm,
        xtick={0,1,2,3,4,5},
        xticklabel={
            \pgfkeys{/pgf/fpu}
            \pgfmathparse{10^\tick}\pgfmathprintnumber\pgfmathresult
            \pgfkeys{/pgf/fpu=false}
        },
    },
]
\addplot [
    mesh,
    draw=none,
    point meta=explicit, % use the "meta expr" defined below
] table [
    col sep=comma,
    create on use/xaccum/.style={
        create col/expr=\pgfmathaccuma+\prevrow{width}
    },
    meta expr=lg10(\thisrow{height}), % transform "order" into "linear" for colorbar
    x=xaccum, y=height,
] {data.csv};
\end{axis}
\end{tikzpicture}

\end{document}

答案1

颜色栏中的宏\tick已经包含指数,因此您只需使用xticklabel=$10^{\pgfmathprintnumber{\tick}}$

\documentclass[border=5mm]{standalone}

\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}

\begin{filecontents}{data.csv}
height,width
1,2
205241,3
205241,0
\end{filecontents}

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

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    enlargelimits=false,
    hide axis,
    scale only axis,
    height=0,
    width=0,
    colorbar horizontal,
    colorbar style={
        width=10cm,
        xtick={0,1,...,6},
        xticklabel=$10^{\pgfmathprintnumber{\tick}}$
    },
]
\addplot [
    mesh,
    draw=none,
    point meta=explicit
] table [
    col sep=comma,
    create on use/xaccum/.style={
        create col/expr=\pgfmathaccuma+\prevrow{width}
    },
    x=xaccum, y=height,
    meta expr=lg10(\thisrow{height})
] {data.csv};
\end{axis}
\end{tikzpicture}

\end{document}

相关内容