我想要制作以下情节:
是一个洛伦兹函数,中心位于 x=408。但请注意框架中的上部标签,它表示与以像素为单位测量的坐标(底部标签)相关的波数。
我遇到了一些关于在 pgfplots 中绘制两个 x 轴的问题。(例如这里和这里),但他们都担心阴谋二在同一张图上绘制多个函数或曲线,并以不同的方式标记它们。我只有一个函数想要标记两次。
我现在有的是这样的:
\documentclass{standalone}
\usepackage{pgfplots,tikz}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
xlabel={CCD coordinate [px]},
ylabel={Intensity [A.U]},
xmin=0,xmax=1000,
ymajorgrids=true,
xmajorgrids=true,
]
\addplot[line width=1pt,samples=500,domain=0:1000]{4.278*10^(7)/((x-408.4)^2+54.25^2)};
\end{axis}
\end{tikzpicture}
\end{document}
我希望上面的标签包含以下标记,写成以下形式
{{x 1,标签1 },{x 2,标签2 },... }
{80.15,639.892},{244.225,648.096},{408.3,656.3},{572.375,664.504},{736.45,672.708},{900.525,680.911}
我应该在代码中添加什么选项来实现它?
答案1
我以前也需要这个图,所以这是我的结果:
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.17,
% create a style for the plot, so you don't need to repeat yourself
% in both `axis` environments.
Lorentzian plot style/.style={
every tick label/.append style={font=\small},
scaled y ticks=false,
xmin=0,
xmax=1000,
% keep `domain` limits in sync with the x-axis limits
domain=\pgfkeysvalueof{/pgfplots/xmin}:\pgfkeysvalueof{/pgfplots/xmax},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
% load the above created style
Lorentzian plot style,
xlabel={CCD coordinate [px]},
ylabel={Intensity [a.u.]},
axis x line*=left,
ymajorgrids=true,
xmajorgrids=true,
]
\addplot[
line width=1pt,
samples=501,
] {4.278e7/((x - 408.4)^2 + 54.25^2)};
\end{axis}
% produce top x-axis
\begin{axis}[
% load the above created style here too
Lorentzian plot style,
xlabel={Wavelength [nm]},
axis x line*=right,
xtick={80.15,244.225,408.3,572.375,736.45,900.525},
xticklabels={639.9,648.1,656.3,664.5,672.7,680.9},
ytick=\empty,
]
\addplot[
draw=none,
% for dummy use minimum number of `samples`
samples=2
% dummy function to make it as less computational expensive as possible
]{0};
\end{axis}
\end{tikzpicture}
\end{document}
首先,我使用 删除了主图的右侧 x 轴axis x line*=left
,然后添加了相同的图,但没有用 绘制它draw=none
,使用 添加了右侧 x 轴,并使用和axis x line*=right
添加标签,最后使用 删除了空图的 y 轴和标签。xtick={...}
xticklabels={...}
ytick=\empty
然后,我认识到 y 标签缩放因子有一些重叠,因此我使用 将其删除,scaled y ticks=false
并使用 减小了 x 轴标签的大小every tick label/.append style={font=\small}
。
希望它能满足您的需求。
编辑
我添加了@Stefan Pinnows 关于改进工作流程的出色建议,并添加了他的部分评论以便更好地理解这些变化。