在 pgfplot 中设置刻度标签

在 pgfplot 中设置刻度标签

不知怎的,我为情节的勾选标签而苦恼。这是我的想法:

\documentclass[a4paper]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5}
\begin{document}
\begin{figure}
\begin{tikzpicture}
 \begin{axis}[scaled ticks=false,
              restrict x to domain=0:10,
              xtick distance=1,              
              ytick distance=500,
              restrict y to domain=0:3500,
              ylabel = {test},
              legend pos= {north west}
              ]
   \addplot[no marks, blue] table [x=a, y=b] {data/testdata.txt};
   \addlegendentry{test}
 \end{axis}
\end{tikzpicture}
\end{figure}
\end{document}

数据集:

a   b
1   370
2   740
3   1110
4   1480
5   1850
6   2220
7   2590
8   2960
9   3330

这将产生以下内容:

在此处输入图片描述

现在我想3000用单位替换 yticklabel,因此我在 ytick 距离后添加了以下行:

yticklabels={0, 500, 1000, ..., 2500, unit, 3500},

但是现在 y 域从 500 开始到 4000 结束,并且缺少标签 0 和 500。我做错了什么?替换一个刻度标签的最佳方法是什么?

在此处输入图片描述

答案1

您放置单元的方法可行,但如果您的刻度发生变化,您将不得不做大量工作来再次修复它。因此,我建议修改给出的答案https://tex.stackexchange.com/a/416810/95441以获得通用方法。

(此外,您使用了一些axis与您的代码无关的选项,即删除它们会产生相同的结果。因此我将它们删除了。)

有关详细信息,请查看代码中的注释。

% used PGFPlots v1.15
\documentclass[border=5pt]{standalone}
\usepackage{siunitx}
\usepackage{pgfplots}
    \pgfplotsset{
        compat=1.5,
        % adjusted from <https://tex.stackexchange.com/a/416810/95441>
        din yunit2/.style={
            yticklabel style={
                name=ylabel\ticknum,
                append after command=\pgfextra{\xdef\lastyticknum{\ticknum}}
            },
            % changed `.code' to `.append code'
            after end axis/.append code={
                \pgfmathparse{int(\lastyticknum-1)}
                % first "overdraw" the node by rectangle, so it isn't seen any more
                \fill [white]
                    (ylabel\pgfmathresult.south west)
                        rectangle
                    % the `xshift' is needed to not overdraw the axis line
                    ([xshift=-0.4pt]ylabel\pgfmathresult.north east);
                % then place the "unit" text
                \node [anchor=base] at (ylabel\pgfmathresult.base) {#1};
            },
        },
    }
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xtick distance=1,
        ytick distance=500,
        ylabel={test},
        legend pos={north west},
        din yunit2={\si{\meter}},
    ]
        \addplot [no marks, blue] table [x=a, y=b] {
            a   b
            1   370
            2   740
            3   1110
            4   1480
            5   1850
            6   2220
            7   2590
            8   2960
            9   3330
        };
        \legend{test}
    \end{axis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

答案2

PGFPlots 在图中创建了两个不可见的刻度标记,因此当您添加时yticklabels={0, 500, 1000, ..., 2500, unit, 3500},前两个刻度标记会被消耗来填补这个空白。

您可以强制执行所需的操作ytick以使其正常工作:ytick={0, 500, ..., 3500}

在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents}{testdata.txt}
a   b
1   370
2   740
3   1110
4   1480
5   1850
6   2220
7   2590
8   2960
9   3330
\end{filecontents}
\pgfplotsset{compat=1.5}
\begin{document}
\begin{tikzpicture}
 \begin{axis}[scaled ticks=false,
              restrict x to domain=0:10,
              xtick distance=1,
              ytick distance=500,
              ytick=      {0, 500, ..., 3500},
              yticklabels={0, 500, ..., 2500, unit, 3500},
              restrict y to domain=0:3500,
              ylabel = {test},
              legend pos= {north west}
              ]
   \addplot[no marks, blue] table [x=a, y=b] {testdata.txt};
   \addlegendentry{test}
 \end{axis}
\end{tikzpicture}
\end{document}

相关内容