从 pgfplottsables 获取值(浮点类型)

从 pgfplottsables 获取值(浮点类型)

我正在尝试从 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}

相关内容