问题

问题

问题

我正在尝试创建一个与 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 中读取yz值。现在我试图手动添加几行。稍后我想使用某种 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来源

相关内容