![带有多列表格的 Tikz 图形](https://linux22.com/image/245968/%E5%B8%A6%E6%9C%89%E5%A4%9A%E5%88%97%E8%A1%A8%E6%A0%BC%E7%9A%84%20Tikz%20%E5%9B%BE%E5%BD%A2.png)
我正在尝试读取一个包含 100000 行(我仅绘制前 600 行)和 12 列的数据的文件,并用不同的颜色绘制它。数据不包含x
组件,这就是我x expr=\coordindex
在代码中使用的原因。
目前,我的情节面临两个问题。
- 不同的列具有相同的颜色(黑色)
- 图例中的标签应该
$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}