我已经编写了这段代码并且它可以工作:
...
\DTLsetseparator{;}
\DTLloaddb[noheader]{DBcurva}{Curvas.csv}
\begin{tikzpicture}
\foreach \columna in {1,3,...,\DTLcolumncount{DBcurva}}{
\edef\listaPuntos{}
\pgfmathtruncatemacro{\columnasig}{1+\columna}
\foreach \fila in {1,2,...,\DTLrowcount{DBcurva}}
{
\DTLgetvalue{\cX}{DBcurva}{\fila}{\columna}
\DTLgetvalue{\cY}{DBcurva}{\fila}{\columnasig}
\xdef\listaPuntos{(\cX,\cY) -- \listaPuntos}
}
\draw \listaPuntos cycle;
}
\end{tikzpicture}
...
这将读取一个名为“Curvas.csv”的 CSV 文件。列是曲线上点的坐标(X1、Y1、X2、Y2、X3、Y3、X4、Y4..)。代码可以毫无问题地绘制文件中的所有曲线(最初我不知道有多少条曲线)。
有没有更好的方法(我无法将每条曲线分开在不同的文件中)?
答案1
您可以pgfplots
循环遍历数据文件中的列并绘制曲线:
\documentclass{minimal}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[every plot/.style={no markers},cycle list name=linestyles]
\pgfplotstableread[col sep=comma] {testdata.csv}\data % Save the CSV to a macro
\pgfplotstablegetcolsof{\data} % Get the number of columns n
\pgfmathparse{\pgfplotsretval-2} % Calculate column index Xn = n-2
\let\xmax\pgfmathresult
\foreach \x in {0,2,...,\xmax} {
\pgfmathadd{\x}{1} % Offset one to get Y column index
\let\y\pgfmathresult
\addplot+[no markers,line width=2pt] table [x index=\x,y index=\y] \data;
}
\end{axis}
\end{tikzpicture}
\end{document}
testdata.csv
:
X1,Y1,X2,Y2,X3,Y3,X4,Y4
0,0,0,1,0,2,0,3
4,2,5,1,6,6,6,0
8,3,10,4,10,1,10,10