如何在图表上链接轴?

如何在图表上链接轴?

我在许多报告中绘制了红外光谱,并以两种方式显示能量单位,$cm^{-1}$底部 x 轴上显示波数,顶部 x 轴上显示波长(nm)。关系是 X(nm)=1e7/Y(cm^{-1})

例如,从4000$cm^{-1}$-400$cm^{-1}$底部 x 轴(线性刻度)开始的光谱对应于 2500nm - 25,000nm 的波长范围(非线性刻度)。有没有办法在 pgf、tikz 等中完成此操作?我使用 Origin 执行此操作,然后导出为 pdf 并使用 \includegraphics{linked-axis-plot.pdf}

答案1

您可以使用 PGFplots 来实现这一点。要获得第二个 x 轴,您必须将原始图与仅包含次轴的等尺寸第二个图叠加。我编写了一个名为的样式,master axis用于计算并保存次轴所需的等效水平尺寸,然后使用该样式secondary axis读取和设置尺寸。

带链接轴的红外图

\documentclass{article}
\usepackage{pgfplots}
\usepackage{siunitx} % For typesetting of units

\pgfplotsset{compat=newest}
\pgfkeys{/pgfplots/.cd,master axis/.style={
    scale only axis,
    enlarge x limits=false,
    x dir=reverse,axis x line*=bottom,
    xticklabel shift=3pt,
    after end axis/.code={
      \pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}
      \pgfmathparse{\pgfkeysvalueof{/pgfplots/xmin}}
      \global\let\masterxmin=\pgfmathresult
      \pgfmathparse{\pgfkeysvalueof{/pgfplots/xmax}}
      \global\let\masterxmax=\pgfmathresult
      \pgfkeys{/pgf/fpu=false}
    }
  },
  slave axis/.style={
    scale only axis,enlarge x limits=false,
     x dir=reverse,
    axis x line*=top,
    axis y line=none,
    xmin=\masterxmin,xmax=\masterxmax,ymin=0,ymax=1,
    scaled x ticks=false,
    xtick={100,400,1000,2000,4000,10000},
    xticklabel={
      \pgfkeys{/pgf/fpu}
      \pgfmathparse{1e7/\tick}
      \pgfmathprintnumber{\pgfmathresult}
    }
  }
}
\begin{document}
\begin{tikzpicture}

\begin{axis}[master axis,
  ymin=0,ymax=100,
  xmin=400,xmax=4000,
  enlarge x limits=false, yticklabel={\SI[round-mode=places,round-precision=0]{\tick}{\percent}}, xlabel=Wavenumber / \si{\per\centi\metre},
  ylabel=Transmissivity
]
\addplot[domain=400:4000,samples=100,thick]{-(abs(tan(x/10))-2*rnd)+90};
\end{axis}

\begin{axis}[slave axis,xlabel=Wavelength / \si{\nano\metre}]\end{axis}

\end{tikzpicture}
\end{document}

相关内容