.png)
como en hilo Obtenga la distancia de tick generada automáticamente de un pgfplot (DIN 461) Ya pregunté, estoy buscando una manera de obtener las unidades entre los dos últimos ticks. La solución del hilo mencionado funciona para un eje. Intenté extender el código para dos ejes, pero esto solo funciona en el eje. ¿Qué estoy haciendo mal?
\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}
Respuesta1
Esto se debe a que el segundo after end axis/.code
sobrescribe al primero. Por lo tanto, cambiar .code
a .append code
resuelve el problema.
% 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}
Respuesta2
Es posible que desees incluir el código para dibujar el eje en conjunto:
\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}