我在许多报告中绘制了红外光谱,并以两种方式显示能量单位,$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}