我有一个由外部程序(matlab)创建的二维数据集。
我想使用 pgfplots 绘制这个图表。
我只对 x 轴上的两个数据点感兴趣。这些应该得到刻度。问题是:这些数据点的位置取决于我的数据生成 matlab 代码的规范,因此是内生的。我怎样才能自动绘制图画?
这是我目前的想法:在生成数据时,我还将两个值写在两个单独的文件中b_value.dat
,c_value.dat
每个文件只包含该值。
最简单的方法是使用以下属性
\begin{axis}[%
ytick=\empty,
xtick={\input{b_value.dat},\input{c_value.dat}},
xticklabels={$b$,$c$}
]
我明白了问题那\input
是行不通的。
它似乎在里面也不起作用\pgfplotsset
。
有什么方法可以使这个自动化吗?
糟糕的解决方法\pgfplotsset
:我在 matlab 中编写了整个部分并input
用于此。我不喜欢这种方法,因为据我所知,matlab 不应该写入脏乳胶。我更愿意只将值b
和c
作为 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}