對於我的 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}