问题
我正在尝试创建一个与 matlab 命令生成的图表类似的图表waterfall()
:
其数据存储在 csv 文件中。在本例中,数据有 129 列,第一列只是索引,其他列包含 128 行的数据。上图中使用的数据可以在以下位置找到:在这个 pastebin 中。
我尝试过的方法
\documentclass[crop, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotstableread[col sep = comma]{data.csv}\mydata
\begin{document}
\begin{tikzpicture}
\begin{axis}[
no markers,
xmin = 0, xmax = 140,
ymin = 0, ymax = 150,
zmin = 0, zmax = 0.07,
x dir = reverse]
\addplot table[x = 1, y index = {0}, z index = {1}]{\mydata};
\addplot table[x = 2, y index = {0}, z index = {2}]{\mydata};
\end{axis}
\end{tikzpicture}
\end{document}
基本上,我试图给每行一个固定x
值,并让它从 csv 中读取y
和z
值。现在我试图手动添加几行。稍后我想使用某种 for 循环来生成 addplot 条目。
答案1
使用线程由@Jake 提供我设法解决了这个问题。我需要导入pgfplotstable
。然后我可以使用pgfplotsinvokeforeach
和进行迭代x expr
。有效的解决方案如下:
\documentclass[crop, tikz]{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotstableread[col sep = comma]{data.csv}\mydata
\begin{document}
\begin{tikzpicture}
\begin{axis}[
no markers,
xmin = 0, xmax = 140,
xlabel = {Polyphase},
ymin = 0, ymax = 150,
ylabel = {sample\#},
zmin = 0, zmax = 0.07,
zlabel = {Magnitude},
x dir = reverse]
\pgfplotsinvokeforeach{1,2,...,128}{
\addplot3 table[x expr = #1, y index = {0}, z index = {#1}]{\mydata};}
\end{axis}
\end{tikzpicture}
\end{document}
这仍然需要一些微调,但它确实有效。为了使其工作,我还必须增加 TeX 内存。要在 miktex 系统中增加 TeX 内存,请使用 打开相关配置文件initexmf --edit-config-file pdflatex
。然后添加以下值,如果需要,可以根据自己的喜好进行编辑:
pool_size=5000000
main_memory=6000000
extra_mem_bot=2000000
font_mem_size=2000000
然后使用 重新制作格式文件initexmf --dump=pdflatex
。来源。