无法让 x 坐标变换使用先前使用过的 x 值

无法让 x 坐标变换使用先前使用过的 x 值

我想复制阿伦尼乌斯图:它是一个半对数图,以 1000/ 的函数形式呈现某事物电视电视是开尔文温度)。这对读者来说不太方便,因此一个额外的轴电视是必须的。

我曾尝试使用此解决方案这个也是,但我总是以从 0 到 1 的范围结束,而不是 ~380 到 710。我猜是我没有正确地写出这一x coord trafo行。

这是我的 MWE

\documentclass[tikz=true]{standalone}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{pgfplots}
    \pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        axis x line*= bottom,
        axis y line*= left,
        ymode = log,
        xlabel={1000/T (1/K)},
        ylabel = phi,
        xmin = 1.4,
        xmax = 2.6,
        ymin = 3e-14,
        ymax = 5e-11
    ]
        \addplot[red] {9.39e-9*exp(-37.3e3/(8.314*(1000/x)))};
    \end{axis}
    \begin{axis}[
        axis x line*= top,
        axis y line*= right,
        xlabel={T (K)},
        xmin=2.6,
        xmax=1.4,
        xtick={500, 600},
        ytick=\empty,
        x coord trafo/.code=\pgfmathparse{1000/#1}
    ]
    \end{axis}
\end{tikzpicture}
\end{document}

这是非常不令人满意的结果

顶部 x 轴的范围从 0 到 1,而不是实际温度在 500K 左右

如果您可以让右侧的勾号消失或者至少与左侧的勾号相对应,则可以获得加分。

答案1

其中一种方法是利用可以赋予表达式的功能xticklabel

有关详细信息,请查看代码中的注释。(请注意,我还对您的代码做了一些其他“改进”,这可能会有用。)

% used PGFPlots v1.17
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    % (use this `compat` level or higher to make use of the improved axis label positioning)
    \pgfplotsset{compat=1.3}
\begin{document}
\begin{tikzpicture}[
    % (so we don't have to repeat ourselves we define some variables)
    /pgf/declare function={
        xmin=1.4;
        xmax=2.6;
    },
    % (moved stuff here which is used in both `axis` environments)
    every axis/.append style={
        xmin=xmin,
        xmax=xmax,
        % (restrict `domain` to the used region ...
        domain=xmin:xmax,
        %  ... and since it is a straight line we only need two `samples`)
        samples=2,
    },
]
    \begin{axis}[
        axis x line*=bottom,
        axis y line*=left,
        ymode=log,
        % (just improved the `axis` labels a bit)
        xlabel={$1000/T$ (1/K)},
        ylabel=$\varphi$,
        ymin=3e-14,
        ymax=5e-11,
    ]
        \addplot [red] {9.39e-9*exp(-37.3e3/(8.314*(1000/x)))};
    \end{axis}
    \begin{axis}[
        axis x line*=top,
        axis y line*=right,
        xlabel={$T$ (K)},
        % show the "usual" x-axis
        xticklabel={
            \pgfmathparse{1000/\tick}%
            \pgfmathprintnumber[precision=0]{\pgfmathresult}
        },
        ytick=\empty,
    ]
        % we need to add a dummy point to plot the right axis labels
        \addplot [draw=none,fill=none] coordinates {(2,0)};
    \end{axis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容