对于我的 2x2 因子数据,我想在 Tikz 中创建一个带有置信区间的线图。x 轴刻度应该有一个小的偏移,以便两个图的置信区间不会相互重叠(例如位置躲避在 ggplot2 中)。
我目前的结果看起来很像我想要的:
但是,我的代码非常不优雅。我插入了一个不可见的图,以实现 x 轴刻度位于数据点之间的中心(见下面的代码)。
我的问题是:是否有更优雅的方式来实现 Tikz 中的位置躲避,或者甚至通常创建这样的折线图?
\documentclass{article}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.9}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
grid = major,
ylabel = Response time (ms),
xlabel = Prime valence,
xtick = data,
xmin = 0,
xmax = 1,
xticklabels = {negative,positive},
legend style = {at={(1.2,0.5)},
anchor = center}
]
\addplot[white] plot % invisible plot to center the labels
coordinates {
(0.25,750)
(0.75,750)
};
\addlegendentry{}
\addplot[red,mark=square*] plot[error bars/.cd, y dir=both, y explicit]
coordinates {
(0.22,769) +- (0,15) % manual dodge for each data point
(0.72,764) +- (0,15)
};
\addlegendentry{negative}
\addplot[green,mark=square*] plot[error bars/.cd, y dir=both, y explicit]
coordinates {
(0.28,746) +- (0,15)
(0.78,716) +- (0,15)
};
\addlegendentry{positive}
\end{axis}
\end{tikzpicture}
\end{document}
答案1
我有两个可能的改进:
您的隐形图只有一个目的,即收集 的输入
xtick=data
。如果您写xtick={0.25,0.75}
,则不再需要隐形图。我不知道您是否想将解决方案嵌入到一些您事先不知道位置的更高级解决方案中……但对于最小值,这显然解决了问题。您已手动将偏移量添加到每个坐标。或者,您也可以
pgfplots
通过 来完成该工作x filter
,请参见下面的示例。
以下是经过这两项修改后的结果:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
grid = major,
ylabel = Response time (ms),
xlabel = Prime valence,
xtick = {0.25,0.75},
xmin = 0,
xmax = 1,
xticklabels = {negative,positive},
legend style = {at={(1.2,0.5)},
anchor = center}
]
\addplot[red,mark=square*,
% manual dodge for each data point
x filter/.code={\pgfmathparse{\pgfmathresult-0.03}}
] plot[error bars/.cd, y dir=both, y explicit]
coordinates {
(0.25,769) +- (0,15)
(0.75,764) +- (0,15)
};
\addlegendentry{negative}
\addplot[green,mark=square*,
% manual dodge for each data point
x filter/.code={\pgfmathparse{\pgfmathresult+0.03}}
] plot[error bars/.cd, y dir=both, y explicit]
coordinates {
(0.25,746) +- (0,15)
(0.75,716) +- (0,15)
};
\addlegendentry{positive}
\end{axis}
\end{tikzpicture}
\end{document}