Für meine 2x2-Fakultätsdaten möchte ich in Tikz ein Liniendiagramm mit Konfidenzintervallen erstellen. Die Striche auf der X-Achse sollen einen kleinen Versatz aufweisen, damit sich die Konfidenzintervalle der beiden Diagramme nicht überschneiden (wiePosition_Ausweichenin ggplot2).
Mein aktuelles Ergebnis sieht ganz so aus, wie ich es möchte:
Mein Code ist jedoch äußerst unelegant. Ich habe ein unsichtbares Diagramm eingefügt, um zu erreichen, dass die Teilstriche der X-Achse zwischen den Datenpunkten zentriert sind (siehe Code unten).
Meine Frage lautet: Gibt es eine elegantere Möglichkeit, in Tikz ein Positions-Dodging zu erreichen oder überhaupt solche Liniendiagramme zu erstellen?
\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}
Antwort1
Ich habe zwei mögliche Verbesserungen:
Ihr unsichtbares Diagramm hat nur einen Zweck, nämlich die Eingabe für zu sammeln
xtick=data
. Wenn Sie schreibenxtick={0.25,0.75}
, brauchen Sie das unsichtbare Diagramm nicht mehr. Ich weiß nicht, ob Sie die Lösung in eine fortgeschrittenere Lösung einbetten möchten, bei der Sie die Positionen nicht im Voraus kennen ... aber für das Minimale löst dies das Problem eindeutig.Sie haben die Offsets manuell zu jeder Koordinate hinzugefügt. Alternativ können Sie
pgfplots
diese Aufgabe auch von erledigen lassenx filter
, siehe Beispiel unten.
Hier ist das Ergebnis mit diesen beiden Modifikationen:
\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}