使用 pgfplots 绘制两个水平标签

使用 pgfplots 绘制两个水平标签

我想要制作以下情节:

洛伦兹

是一个洛伦兹函数,中心位于 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 关于改进工作流程的出色建议,并添加了他的部分评论以便更好地理解这些变化。

相关内容