pgfplots:使用因子重新缩放轴,并带有良好的刻度标签/位置

pgfplots:使用因子重新缩放轴,并带有良好的刻度标签/位置

2000我正在尝试通过某些值(例如y 轴和19099x 轴)对 pgfplots 图表的轴进行归一化。y轴看起来不错,正如预期的那样,但 x 轴被一个不太好看的数字缩放,产生的刻度标签类似于0.521.051.57等,而不是0.511.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。使用xminxmax等时,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}

在此处输入图片描述

相关内容