当使用 pgfmathparse 来偏移图时,如何删除多余的刻度?

当使用 pgfmathparse 来偏移图时,如何删除多余的刻度?

我使用 pgfplot 将几个数据集绘制到同一张图表中,因此我使用\pgfmathparse将每个图稍微向左或向右偏移。

我发现第一个图永远是刻度线的中心,因此我创建了一个不可见的中心,其他图可以围绕它放置。

然而,这会导致最左边的图出现一个额外的刻度。下图显示第一个 a、b、c、d 不应该出现,第二个刻度是正确的,就在中间。

绘图示例

我该如何删除这个勾号?我可以使用显式方法删除字母,xticklabels但勾号线仍然存在。

下面是一个简单的例子:

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{filecontents}
\begin{filecontents*}{testdata.csv}
var range1 range2
a 1 2
b 1 1
c 3 4
d 1 2
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
        \begin{axis}[
            xtick=data,
            symbolic x coords={a,b,c,d}
        ]
        \addplot +[only marks, forget plot, no markers]
            table[x=var, y=range1]{testdata.csv};% the first plot is the center
        \addplot +[only marks, x filter/.code=\pgfmathparse{\pgfmathresult-0.2}]
            table[x=var, y=range1]{testdata.csv};
        \addplot +[only marks, x filter/.code=\pgfmathparse{\pgfmathresult+0.2}]
            table[x=var, y=range2]{testdata.csv};
        \end{axis}
\end{tikzpicture}
\end{document}

答案1

xtick=data将为每个数据点设置一个 xlabel,但在本例中您不需要这样做。在此特定情况下,您只需删除它xtick=data,系统就会设置正确的标签。但在实际情况下,您可能希望使用类似 的内容明确设置标签xtick={a,b,c,d}。您可能还希望将 的text height明确设置x tick label style为类似 的内容2ex,以便正确获得字母的垂直位置:

 \documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{filecontents}
\begin{filecontents*}{testdata.csv}
var range1 range2
a 1 2
b 1 1
d 1 2
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
        \begin{axis}[
            symbolic x coords={a,b,c,d},
            xtick={a,b,c,d},
            x tick label style={text height=2ex}
        ]
        \addplot +[only marks, x filter/.code=\pgfmathparse{\pgfmathresult-0.2}]
            table[x=var, y=range1]{testdata.csv};
        \addplot +[only marks, x filter/.code=\pgfmathparse{\pgfmathresult+0.2}]
            table[x=var, y=range2]{testdata.csv};
        \end{axis}
\end{tikzpicture}
\end{document}

相关内容