我正在尝试从 csv 文件创建的表中获取某些值。我希望绘制这些值。问题是,当我提取这些值时,它们似乎不再是浮点类型。
% 1-Importing all values from CSV file.
\pgfplotstableread[col sep=semicolon]{allValues.csv}\allValues
% 2-Getting the values I want to plot.
\pgfplotstableread[col sep=comma]{X, Y
\pgfplotstablegetelem{0}{[index]2}\of\allValues \pgfplotsretval,\pgfplotstablegetelem{2}{[index]2}\of\allValues \pgfplotsretval
\pgfplotstablegetelem{0}{[index]3}\of\allValues \pgfplotsretval,\pgfplotstablegetelem{2}{[index]3}\of\allValues \pgfplotsretval
}\plotValues
% 3-Plotting
\begin{figure}[H]
\begin{tikzpicture}
\begin{axis}[
legend columns=1,
grid=both,
]
\addplot[only marks, mark=o] table {\plotValues};
\end{axis}
\end{tikzpicture}
\end{figure}
有什么想法吗?或者有没有最简单的方法来实现这一点?
以下是 allValues.csv 文件的内容:
Name;Unit;Values1;Values2;Values3
N_fan;rpm;1300;1600;1300
T_out;°C;11.3;13.6;20.2
T_1;°C;46.5;54.8;45.3
T_2;°C;56.4;61.8;58
T_3;°C;114.1;116.6;92
答案1
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\pgfplotsset{compat=1.16}
\begin{filecontents*}{\jobname.csv}
Name;Unit;Values1;Values2;Values3
N_fan;rpm;1300;1600;1300
T_out;°C;11.3;13.6;20.2
T_1;°C;46.5;54.8;45.3
T_2;°C;56.4;61.8;58
T_3;°C;114.1;116.6;92
\end{filecontents*}
\usepackage{xinttools}
\makeatletter
\let\firstoftwo\@firstoftwo
\let\secondoftwo\@secondoftwo
\makeatother
\begin{document}
% 1-Importing all values from CSV file.
\pgfplotstableread[col sep=semicolon]{\jobname.csv}\allValues
%\show\allValues
% 2-Getting the values I want to plot.
\newcommand\setupmytable{}%
\newcommand\mysep{}%
\newcommand\mycrcr{}
\def\setupmytable{X, Y}%
\let\mysep\firstoftwo
\let\mycrcr\relax
\xintForpair #1#2 in {(0, 2), (2, 2), (0, 3), (2, 3)}:
{%
\pgfplotstablegetelem{#1}{[index]#2}\of\allValues
\edef\setupmytable{\setupmytable \mysep{\mycrcr}{,}\pgfplotsretval}%
\mysep{\let\mysep\secondoftwo}{\let\mysep\firstoftwo}%
}
\def\mycrcr{\noexpand\\\space}
\edef\setupmytable{\noexpand\pgfplotstableread[col sep=comma, row sep=crcr]%
{\setupmytable\mycrcr}\noexpand\plotValues}
\setupmytable
% 3-Plotting
\begin{figure}[htbp]
\begin{tikzpicture}
\begin{axis}[
legend columns=1,
grid=both,
]
\addplot[only marks, mark=o] table {\plotValues};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
关于,将两个嵌套的外部索引用于行索引,将内部索引用于列索引\xintForpair
可能更合乎逻辑,但是当我开始这样做时,我不确定原始语法符合什么。 (我使用了一些技巧,仅限于两列,如果使用两个嵌套的方法来做到这一点,那么就不需要了)\xintFor
\mysep
\xintFor
非常意外地(我的意思是,与在这个网站上提问的大多数用户相比)我打开了的文档,pgfplotstable
并且我认为/pgfplots/table/row sep=newline|\\
第 7 页的文档是相关的。
> \setupmytable=macro:
->\pgfplotstableread [col sep=comma, row sep=crcr]{X, Y\\ 1300,46.5\\ 1600,54.8\\ }\plotValues .
l.46 \show\setupmytable
正如我阅读手册的承诺,我现在有一种纯粹的pgfplotstable
方法,但它很复杂。
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\pgfplotsset{compat=1.16}
\begin{filecontents*}{\jobname.csv}
Name;Unit;Values1;Values2;Values3
N_fan;rpm;1300;1600;1300
T_out;°C;11.3;13.6;20.2
T_1;°C;46.5;54.8;45.3
T_2;°C;56.4;61.8;58
T_3;°C;114.1;116.6;92
\end{filecontents*}
\begin{document}
% 1-Importing all values from CSV file.
\pgfplotstableread[col sep=semicolon]{\jobname.csv}\allValues
% 2-Getting the values I want to plot.
% c'est-à-dire il semble vouloir la colonne X avec les entrées 2 et 3 de la
% première rangée et la colonne Y constituée avec les entrées 2 et 3 de la
% de la troisième rangée
% Thus this is some kind of partial transpose
\pgfplotstablevertcat\morethanallValues\allValues
\pgfplotstablecreatecol[
columns = {},
create col/assign/.code={%
\edef\entry
{\ifnum\pgfplotstablerow=0 X\else
\ifnum\pgfplotstablerow=2 Y\else
\pgfplotstablerow\fi\fi}
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
}]
{extra}\morethanallValues
%\pgfplotstabletypeset[string type]\morethanallValues
\pgfplotstabletranspose[columns={Values1,Values2,extra},
colnames from=extra,
input colnames to=]\plotValues\morethanallValues
%\pgfplotstabletypeset[string type]\plotValues
% surely there must be simpler way to get a table from some other
% with some columns selected... (I mean before \pgfplotstabletypeset
% which is not used here)
\pgfplotstabletranspose[columns={X,Y}]\plotValues\plotValues
%\pgfplotstabletypeset[string type]\plotValues
\pgfplotstabletranspose[colnames from=colnames,
input colnames to=]\plotValues\plotValues
%\pgfplotstabletypeset[string type]\plotValues
%\end{document}
% 3-Plotting
\begin{figure}[htbp]
\begin{tikzpicture}
\begin{axis}[
legend columns=1,
grid=both,
]
\addplot[only marks, mark=o] table {\plotValues};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}