我使用 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}