带有多列表格的 Tikz 图形

带有多列表格的 Tikz 图形

我正在尝试读取一个包含 100000 行(我仅绘制前 600 行)和 12 列的数据的文件,并用不同的颜色绘制它。数据不包含x组件,这就是我x expr=\coordindex在代码中使用的原因。

目前,我的情节面临两个问题。

  1. 不同的列具有相同的颜色(黑色)
  2. 图例中的标签应该$d_1$,...,$d_{12}$改为$d_0$,...,$d_{11}$

我尝试了以下代码:

\documentclass[pdftex]{scrbook}
\usepackage{pgfplots,pgfplotstable}

\newcommand{\plotfile}[1]{
 \pgfplotstableread{#1}{\table}
 \pgfplotstablegetcolsof{#1}
 \pgfmathtruncatemacro\numberofcols{\pgfplotsretval - 1}
 \pgfplotsinvokeforeach{0,...,\numberofcols}{
 \pgfplotstablegetcolumnnamebyindex{##1}\of{\table}\to{\colname}
   \addplot[only marks, mark size=0.3pt,mark=*] table [x expr=\coordindex,y index=##1] {#1};
   \addlegendentryexpanded{$d_{##1}$}
 }
}

\begin{document}
 \begin{tikzpicture}
  \begin{axis}[xlabel={Influx},
    ylabel={Center of mass},
    grid=major,
    ymin=-1,
    ymax=1,
    xmin=0,
    xmax=600,      
    legend style={
      font=\footnotesize,
      at={(1.3,1)},
      anchor=north east}]
    \plotfile{./tables/schwerpunkt_12_.0220.log}
  \end{axis}
 \end{tikzpicture}
\end{document}

我得到的结果是:

阴谋

编辑

我能够使用 @Jake (颜色列表) 的提示来创建具有 12 种不同颜色的图。仍未解决的是,我想在+1附近添加数字d。这意味着,$d_0$应该有$d_1$和 等,而不是 。

我的猜测是,我需要以某种方式创建一个宏来对它进行求和##1 + 1并将其结果放入addlegendentryexpanded{$d_{##1}$}而不是##1

我该如何做呢?

答案1

这是一个建议。我包含了一个小型 lua 脚本来生成数据集(如果您不想使用lualatex,请删除该\directlua部分并将表文件更改为包含实际数据的文件。

为了计算总和,我使用\numexpr(比另一次调用解析器更便宜pgfmath)。

% Compile with lualatex
\documentclass{standalone}

\usepackage{pgfplots,pgfplotstable}

\directlua{%
  local f1 = function (t, tau)
    return tostring(math.exp(-t/(600*tau)))
  end
  local f2 = function (t, tau, f)
    return tostring(math.exp(-t/(600*tau))*math.cos(t*f))
  end
  local filehandle, errormessage = io.open("table_example.log","w")
  for i = 1, 600 do
      filehandle:write(
        f1(i, .05) .. ";" .. 
        f1(i, .1) .. ";" .. 
        f1(i, .2) .. ";" .. 
        f1(i, .3) .. ";" .. 
        f1(i, .4) .. ";" .. 
        f1(i, .5) .. ";" .. 
        f2(i, .05, 100) .. ";" .. 
        f2(i, .1, 100) .. ";" .. 
        f2(i, .2, 100) .. ";" .. 
        f2(i, .3, 100) .. ";" .. 
        f2(i, .4, 100) .. ";" .. 
        f2(i, .5, 100) .. "\noexpand\n")
  end
  filehandle:close()}

\begin{document}

\pgfplotsset{%
  compat = 1.5,
  cycle list name = exotic,
  table/col sep = semicolon}

\newcommand{\plotfile}[1]{%
  \pgfplotstableread{#1}{\table}
  \pgfplotstablegetcolsof{#1}
  \pgfmathtruncatemacro\numberofcols{\pgfplotsretval - 1}
  \pgfplotsinvokeforeach{0,...,\numberofcols}{%
    \pgfplotstablegetcolumnnamebyindex{##1}\of{\table}\to{\colname}
    \addplot+[only marks, mark size=0.3pt] table [x expr=\coordindex,y
    index=##1] {#1}; 
    \addlegendentryexpanded{$d_{\number\numexpr##1+1\relax}$}
  }
}

\begin{tikzpicture}
  \begin{axis}[xlabel={Influx},
    ylabel={Center of mass},
    grid=major,
    ymin=-1,
    ymax=1,
    xmin=0,
    xmax=600,      
    legend style={
      font=\footnotesize,
      at={(1.3,1)},
      anchor=north east}]
    \plotfile{./table_example.log}
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容