数据生成过程创建的 pgfplots 中的内生刻度

数据生成过程创建的 pgfplots 中的内生刻度

我有一个由外部程序(matlab)创建的二维数据集。

我想使用 pgfplots 绘制这个图表。

我只对 x 轴上的两个数据点感兴趣。这些应该得到刻度。问题是:这些数据点的位置取决于我的数据生成 matlab 代码的规范,因此是内生的。我怎样才能自动绘制图画?

这是我目前的想法:在生成数据时,我还将两个值写在两个单独的文件中b_value.datc_value.dat每个文件只包含该值。

最简单的方法是使用以下属性

\begin{axis}[%
    ytick=\empty,
    xtick={\input{b_value.dat},\input{c_value.dat}},
    xticklabels={$b$,$c$}
]

我明白了问题\input是行不通的。

它似乎在里面也不起作用\pgfplotsset

有什么方法可以使这个自动化吗?

糟糕的解决方法\pgfplotsset:我在 matlab 中编写了整个部分并input用于此。我不喜欢这种方法,因为据我所知,matlab 不应该写入脏乳胶。我更愿意只将值bc作为 matlab 例程中的数据点写入。这可能吗?

(如果需要,我可以包含 MWE,但恕我直言,这不是必需的,而且文件数量太多只会造成混淆)

答案1

您已经有了将坐标放入单独文件的正确想法,但您不应该直接\input将其“输入” xtick,而应该将其绘制为虚拟第一个图并使用xtick=data。此选项绘制第一个给定命令的 x 坐标\addplot,从而准确给出您要搜索的结果。

请注意满的必须给出坐标,并且相应的 y 值会影响轴限值。因此最好使用与“真实”数据相同的 y 坐标(或明确设置轴限值)。

有关更多详细信息,请查看代码中的注释。

    % put the two coordinates for which you want to show the `xtick's here
    % (Optimally provide the "full" coordinate, i.e. including the corresponding
    %  y value, so the axis limits aren't influenced by these dummy data like
    %  shown in this example)
    \begin{filecontents*}{xtick.txt}
        x   y
        0.5 0
        1.5 0
    \end{filecontents*}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xtick=data,
    ]
        % use the first plot to draw the ticks only, so make it invisible
        % and "reset" the `cycle list index`
        \addplot [draw=none] table {xtick.txt};
            \pgfplotsset{cycle list shift=-1}

        % now you add your normal data
        \addplot coordinates {(1,1)};
    \end{axis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容