2000
我正在尝试通过某些值(例如y 轴和19099
x 轴)对 pgfplots 图表的轴进行归一化。y轴看起来不错,正如预期的那样,但 x 轴被一个不太好看的数字缩放,产生的刻度标签类似于0.52
、1.05
、1.57
等,而不是0.5
、1
、1.5
等。
有没有办法缩放轴但仍自动将刻度放置在合适的位置?
最小工作示例:
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin = 0,xmax = 70000,
ymin = 0,ymax = 5000,
scaled x ticks=manual:{}{\pgfmathparse{(#1)/(19099)}},
scaled y ticks=manual:{}{\pgfmathparse{(#1)/(2000)}},
]
\end{axis}
\end{tikzpicture}
\end{document}
更新
尝试@Jake 方法,当我在轴内绘制函数时出现错误,如下所示:
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin = 0,xmax = 70000,
ymin = 0,ymax = 5000,
domain=0:70000,
x coord trafo/.code={
\pgfkeys{/pgf/fpu=true}
\pgfmathparse{(#1)/(19099)}
\pgfkeys{/pgf/fpu=false}
},
y coord trafo/.code={
\pgfkeys{/pgf/fpu=true}
\pgfmathparse{(#1)/(2000)}
\pgfkeys{/pgf/fpu=false}
},
% scaled x ticks=manual:{}{\pgfmathparse{(#1)/(19099)}},
% scaled y ticks=manual:{}{\pgfmathparse{(#1)/(2000)}},
]
\addplot {2000+0.001*(x/60)^2};
\end{axis}
\end{tikzpicture}
\end{document}
这会产生错误,例如:“!非法计量单位(插入 pt)。”
答案1
只有在确定刻度位置后,该scaled x ticks
键才会起作用,因此这里不适用该键。相反,您应该使用x coord trafo/.code
和 来转换坐标系y coord trafo/.code
。
请注意,对于像您这样大的值,您需要fpu
在 中打开库.code
。使用xmin
、xmax
等时,fpu
需要在计算后停用库,但在绘制数学表达式时,可能不会停用库。这有点麻烦:您必须\pgflibraryfpuifactive
决定我们是否处于需要打开和关闭库的环境中,还是保持原样:
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=0, xmax=70000,
ymin=0, ymax=5000,
domain=0:70000,
x coord trafo/.code={
\pgflibraryfpuifactive{
\pgfmathparse{(#1)/(19099)}
}{
\pgfkeys{/pgf/fpu=true}
\pgfmathparse{(#1)/(19099)}
\pgfkeys{/pgf/fpu=false}
}
},
y coord trafo/.code={
\pgflibraryfpuifactive{
\pgfmathparse{(#1)/(2000)}
}{
\pgfkeys{/pgf/fpu=true}
\pgfmathparse{(#1)/(2000)}
\pgfkeys{/pgf/fpu=false}
}
},
]
\addplot {2000+0.001*(x/60)^2};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
比Jake的解决方案更简单,但也更肮脏:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.6}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=0, xmax=3.67,
ymin=0, ymax=5000,
domain=0:70000,
x filter/.code={\pgfmathparse{#1/19099}},
scaled y ticks=manual:{}{\pgfmathparse{#1/2000}}
]
\addplot {2000+0.001*(x/60)^2};
\end{axis}
\end{tikzpicture}
\end{document}