Para mis datos factoriales de 2x2, quiero crear un diagrama de líneas con intervalos de confianza en Tikz. Se supone que los ticks del eje x tienen un pequeño desplazamiento para que los intervalos de confianza de los dos gráficos no se superpongan entre sí (comoposición_esquivaren ggplot2).
Mi resultado actual se parece bastante a lo que quiero:
Sin embargo, mi código es extremadamente poco elegante. Inserté un gráfico invisible para lograr que los ticks del eje x estuvieran centrados entre los puntos de datos (consulte el código a continuación).
Mi pregunta es: ¿Existe una forma más elegante de lograr la evasión de posiciones en Tikz, o incluso de crear gráficos de líneas de este tipo en general?
\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}
Respuesta1
Tengo dos posibles mejoras:
Su trama invisible tiene un solo propósito: recopilar la entrada para
xtick=data
. Si escribesxtick={0.25,0.75}
, ya no necesitas la trama invisible. No sé si quieres incrustar la solución en alguna solución más avanzada en la que no conozcas las posiciones de antemano... pero por lo mínimo, esto claramente resuelve el problema.ha agregado los desplazamientos manualmente a cada coordenada. Alternativamente, puede dejar que
pgfplots
haga ese trabajo mediantex filter
; consulte el ejemplo a continuación.
Aquí está el resultado con estas dos modificaciones:
\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}