.png)
正如線程中一樣 取得 pgfplot (DIN 461) 自動產生的刻度距離 已經問過,我正在尋找一種方法來獲取最後兩個刻度之間的單位。上述線程的解決方案適用於一個軸。我嘗試擴展兩個軸的代碼,但這僅適用於軸上。我究竟做錯了什麼?
\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}
答案1
這是因為第二個after end axis/.code
會覆蓋第一個。於是,改變.code
就.append code
解決了問題。
% 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}
答案2
您可能需要包含將軸全部繪製在一起的程式碼:
\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}