我正在尝试使用 latex 绘制修改后的贝塞尔函数,因此我尝试了以下操作我在 Matlab 中生成了以下 .txt 文件
z = linspace(0,20);
scale = 1;
Ks = zeros(4,100);
for nu = 0:3
Ks(nu+1,:) = besselk(nu,z,scale);
end
save('data','Ks','z')
然后我在乳胶中尝试了以下操作
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.10}
\pgfplotstableread{
\include{Data}
}\datatable
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table {\datatable}
;
\end{axis}
\end{tikzpicture}
\end{document}
但我没有得到输出。
答案1
您做错了几件事。首先,除非您另行指定,否则save
Matlab 中的函数会保存二进制文件,并且无法读取文件。您需要添加选项,或使用,或其他将数据写入文本文件的函数。.mat
pgpflotstableread
.mat
-ascii
dlmwrite
fprintf
接下来,您不应该\include
在里面使用pgfplotstableread
,而是直接添加文件名,即\pgfplotstableread{filename.txt}
(扩展名不必是.txt
。)默认情况下\pgfplotstableread
假定文本文件中的列由空格分隔,如果您使用不同的列分隔符,则必须指定,例如\pgfplotstableread[col sep=comma]{...}
如果使用逗号。
最后,您可能必须选择要绘制哪些列。当您这样做时\addplot table {\datatable};
,pgfplots
将使用第一列作为 x 值,第二列作为 y 值。要绘制多列,您需要多个\addplot
,例如
\addplot table[x index=0, y index=1] {\datatable};
\addplot table[x index=0, y index=2] {\datatable};
如果列有命名,则可以使用 egx=NameOfXColumn
代替x index=0
。
工作示例如下。我通过 OctaveOnline 使用了 Octave,但我认为 Matlab 中的代码应该相同。
z = linspace(0,20);
scale = 1;
Ks = zeros(4,100);
for nu = 0:3
Ks(nu+1,:) = besselk(nu,z,scale);
end
% Put both variables in one matrix
% transpose them to make the data column oriented - the dimensions of dataOut is 100 x 5
dataOut = [z' Ks'];
% save the new matrix using the `-ascii` option
save('data.dat','dataOut', '-ascii')
LaTeX 代码:
\documentclass{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.10}
% add file name directly, no \input or \include
\pgfplotstableread{data.dat}\datatable
\begin{document}
\begin{tikzpicture}
\begin{axis}[ymode=log]
\addplot table {\datatable};
\addplot table[y index=1] {\datatable};
\addplot table[y index=2] {\datatable};
\addplot table[y index=3] {\datatable};
\addplot table[y index=4] {\datatable};
\legend{$\nu=0$, $\nu=1$, $\nu=2$, $\nu=3$}
\end{axis}
\end{tikzpicture}
\end{document}