Para meus dados fatoriais 2x2, quero criar um gráfico de linhas com intervalos de confiança em Tikz. As marcas do eixo x devem ter um pequeno deslocamento para que os intervalos de confiança dos dois gráficos não se sobreponham (comoposição_dodgeno ggplot2).
Meu resultado atual parece exatamente o que eu quero:
No entanto, meu código é extremamente deselegante. Inseri um gráfico invisível para conseguir que as marcações do eixo x fiquem centralizadas entre os pontos de dados (veja o código abaixo).
Minha pergunta é: existe uma maneira mais elegante de conseguir esquivar de posição no Tikz, ou mesmo de criar esses gráficos de linha em geral?
\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}
Responder1
Tenho duas melhorias possíveis:
seu gráfico invisível tem apenas um propósito: coletar a entrada para
xtick=data
. Se você escreverxtick={0.25,0.75}
, não precisará mais do enredo invisível. Não sei se você quer embutir a solução em alguma solução mais avançada na qual você não conhece as posições antecipadamente... mas para o mínimo isso claramente resolve o problema.você adicionou os deslocamentos manualmente a cada coordenada. Alternativamente, você pode deixar
pgfplots
esse trabalho por meio dex filter
, veja o exemplo abaixo.
Aqui está o resultado com essas duas modificações:
\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}