Hier ist mein minimaler Code
\documentclass[a4paper,11pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{float,caption}
\usepackage{microtype}
\usepackage{bbold}
\usepackage{tikz}
\usepackage{subfig}
\usepackage{pgfplots,pgfplotstable}
\pgfplotstableread{
x y error
-4.0 0.0296647842303 0.0291503887869
-3.0 0.0293603640735 0.0141878426016
-2.0 0.0286685720323 0.00649661240084
-1.0 0.0275361528438 0.00210364869319
2.0 0.0266314574388 0.00148277554508
3.0 0.0277962098809 0.00421008334229
4.0 0.0291488821404 0.00849079074145
}{\exp}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-4.5,
xmax=4.5,
ymin=0,
ymax=0.06,
axis background/.style={fill=white},
ylabel=$\delta(q)$,
xlabel=moment $q$,
legend columns=3,
yticklabels={,,}
]
\addplot[color=green,thin,error bars/.cd,y dir=both, y explicit] table[x=x,y=y,y error=error] {\exp};
\end{axis}
\end{tikzpicture}
\end{document}
und da ist meine Figur
Ich möchte zwei Dinge an dieser Abbildung ändern: (1) Erstens (und das ist das Wichtigste) möchte ich diesen Pseudo-Tick „10^-2“ oben in der Abbildung nicht, ich hätte gerne Dezimalzahlen (0,002, 0,004, 0,006) als Y-Label. (2) Zweitens (das ist weniger wichtig) möchte ich einen Fehlerbalken nur für x=-4 und x=4 (zum Beispiel).
Antwort1
Beachten Sie, dass Sie, wenn Sie eine der einzelnen Fragen (oder beide in separaten Posts) gestellt hätten, höchstwahrscheinlich noch am selben Tag eine Antwort auf Ihre Frage(n) erhalten hätten.
Für das erste Problem verwenden Sie scaled y ticks=false
. Dies ist erforderlich, da Sie das Häkchen auf Null setzen.Etikettenmit yticklabels={,,}
(was mir yticklabels=\empty
übrigens am besten gefallen würde: es funktioniert unabhängig davon, wie viele Markierungen im Diagramm vorhanden sind), aber die Markierungen selbst werden trotzdem platziert, was bedeutet, dass die Skalierung wirksam sein kann.
Wenn Sie die Häkchen selbst entfernen möchten, verwenden Sie einfach ytick=empty
anstelle von scaled y ticks=false,yticklabels={,,}
.
Für die Fehlerbalken besteht die schnelle und einfache Lösung darin, die unerwünschten Einträge aus der Tabelle zu entfernen. Aber ich gehe davon aus, dass Ihr tatsächlicher Anwendungsfall viel mehr Einträge hat. Wir können eine neue Spalte (genannt error-proc
) in der Tabelle erstellen \exp
mit
\pgfplotstablecreatecol[
<assignments>
]
{error-proc}{\exp}
Dieser <assignments>
Teil konzentriert sich darauf, nur die erste und letzte Zeile zu erfassen error
und nur diese Elemente in unsere neue Spalte zu kopieren error-proc
:
\pgfplotstablecreatecol[
create col/assign first/.code={%
\getthisrow{error}\entry
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
},
create col/assign last/.code={%
\getthisrow{error}\entry
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
},
]
{error-proc}{\exp}
y error=error
Ändern Sie dann einfach y error=error-proc
in Ihrem \addplot
Befehl:
\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=1.12}
\pgfplotstableread{
x y error
-4.0 0.0296647842303 0.0291503887869
-3.0 0.0293603640735 0.0141878426016
-2.0 0.0286685720323 0.00649661240084
-1.0 0.0275361528438 0.00210364869319
2.0 0.0266314574388 0.00148277554508
3.0 0.0277962098809 0.00421008334229
4.0 0.0291488821404 0.00849079074145
}{\exp}
\pgfplotstablecreatecol[
create col/assign first/.code={%
\getthisrow{error}\entry
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
},
create col/assign last/.code={%
\getthisrow{error}\entry
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
},
]
{error-proc}{\exp}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-4.5,
xmax=4.5,
ymin=0,
ymax=0.06,
axis background/.style={fill=white},
ylabel=$\delta(q)$,
xlabel=moment $q$,
yticklabels=\empty,
scaled y ticks=false,
]
\addplot[error bars/.cd,y dir=both, y explicit] table[x=x,y=y,y error=error-proc] {\exp};
\end{axis}
\end{tikzpicture}
\end{document}