..png)
Wie im Thread Holen Sie sich die automatisch generierte Tick-Distanz eines pgfplots (DIN 461). bereits gefragt, ich suche nach einer Möglichkeit, die Einheiten zwischen den letzten beiden Ticks zu erhalten. Die Lösung aus dem erwähnten Thread funktioniert für eine Achse. Ich habe versucht, den Code für zwei Achsen zu erweitern, aber das funktioniert nur für eine Achse. Was mache ich falsch?
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{siunitx}
\pgfplotsset{
din xunit/.style={
xticklabel style={
name=xlabel\ticknum,
append after command=\pgfextra{\xdef\lastxticknum{\ticknum}}
},
after end axis/.code={
\pgfmathparse{int(\lastxticknum-1)}
\path (xlabel\lastxticknum.base) -- (xlabel\pgfmathresult.base) node [midway, anchor=base] {#1};
}
},
din yunit/.style={
yticklabel style={
name=ylabel\ticknum,
append after command=\pgfextra{\xdef\lastyticknum{\ticknum}}
},
after end axis/.code={
\pgfmathparse{int(\lastyticknum-1)}
\path (ylabel\lastyticknum.base) -- (ylabel\pgfmathresult.base) node [midway, anchor=base] {#1};
}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[din xunit=\si{\second}, din yunit=\si{\meter}]
\addplot table {
0 0
1 3
2 4
};
\end{axis}
\end{tikzpicture}
\end{document}
Antwort1
Dies liegt daran, dass der zweite after end axis/.code
den ersten überschreibt. Daher löst das Ändern .code
in .append code
das Problem.
% used PGFPlots v1.15
\documentclass[border=5pt]{standalone}
\usepackage{siunitx}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.15,
din xunit/.style={
xticklabel style={
name=xlabel\ticknum,
append after command=\pgfextra{\xdef\lastxticknum{\ticknum}}
},
% changed `.code' to `.append code'
after end axis/.append code={
\pgfmathparse{int(\lastxticknum-1)}
\path (xlabel\lastxticknum.base) -- (xlabel\pgfmathresult.base) node [midway, anchor=base] {#1};
},
},
din yunit/.style={
yticklabel style={
name=ylabel\ticknum,
append after command=\pgfextra{\xdef\lastyticknum{\ticknum}}
},
% changed `.code' to `.append code'
after end axis/.append code={
\pgfmathparse{int(\lastyticknum-1)}
\path (ylabel\lastyticknum.base) -- (ylabel\pgfmathresult.base) node [midway, anchor=base] {#1};
},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
din xunit=\si{\second},
din yunit=\si{\meter},
]
\addplot table {
0 0
1 3
2 4
};
\end{axis}
\end{tikzpicture}
\end{document}
Antwort2
Möglicherweise möchten Sie den Code zum gemeinsamen Zeichnen aller Achsen einfügen:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{siunitx}
\pgfplotsset{
din label/.style args={#1 and #2}{
xticklabel style={
name=xlabel\ticknum,
append after command=\pgfextra{\xdef\xlastticknum{\ticknum}}
},
yticklabel style={
name=ylabel\ticknum,
append after command=\pgfextra{\xdef\ylastticknum{\ticknum}}
},
after end axis/.code={
\pgfmathparse{int(\xlastticknum-1)}
\path (xlabel\xlastticknum.base) -- (xlabel\pgfmathresult.base) node [midway, anchor=base] {#1};
\pgfmathparse{int(\ylastticknum-1)}
\path (ylabel\ylastticknum.base) -- (ylabel\pgfmathresult.base) node [midway, anchor=base] {#2};
}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[din label=\si{\second} and \si{\meter}]
\addplot table {
0 0
1 3
2 4
};
\end{axis}
\end{tikzpicture}
\end{document}