我想复制阿伦尼乌斯图:它是一个半对数图,以 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}
这是非常不令人满意的结果
如果您可以让右侧的勾号消失或者至少与左侧的勾号相对应,则可以获得加分。
答案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}