负值的“对数刻度”

负值的“对数刻度”

我有以下 MWE:

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\pgfplotsset{compat=1.12}

\begin{filecontents}{data.dat}
4 -1e4
4 -1e3
4 -1e2
4 -10
4 -1
\end{filecontents}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
            xmin=0, xmax=5
        ]
        \addplot table {data.dat};
    \end{axis}
\end{tikzpicture}
\end{document}

这将产生以下图表:

正常比例的绘图

现在我想在 y 轴上以均匀的间距在 -1e0、-1e1、-1e2、-1e3 和 -1e4 处设置刻度。如果我的值为正,我可以通过添加 ymode=log到轴选项来实现,但对于负值,这只会产生错误。

那么,如何才能为负值生成一种对数刻度呢?

答案1

这种方法有效,但需要大量的人工干预。请注意,在这种情况下 [ytick=data] 可以达到相同的效果,但一般来说你不能指望这一点。

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\pgfplotsset{compat=1.12}

\begin{filecontents}{data.dat}
x y
4 -1e4
4 -1e3
4 -1e2
4 -10
4 -1
\end{filecontents}

\begin{document}
% create column "log"
\pgfplotstableread{data.dat}\table
\pgfplotstablecreatecol[create col/expr={-log10(-\thisrow{y})}]{log}\table
%\pgfplotstabletypeset\table
\begin{tikzpicture}
    \begin{axis}[ytick={-4,-3,-2,-1,-0},yticklabels={-1e4,-1e3,-1e2,-10,-1},
            xmin=0, xmax=5
        ]
        \addplot table[x=x, y=log] \table;
    \end{axis}
\end{tikzpicture}
\end{document}

演示

相关内容