PGFPlots - 从文件加载数据时缺少数字,视为零错误

PGFPlots - 从文件加载数据时缺少数字,视为零错误

我正在绘制热图/散点图,其中标记颜色根据分数确定。我已将分数映射到红色、绿色和蓝色值,并尝试根据 RGB 值为标记着色。数据以 csv 文件的形式提供。我找到了原始代码这里并适用于我的情况。

我的问题是,当我尝试从 csv 文件读取数据时,出现以下错误。但如果我将 csv 中的内容复制到我的 .tex 文件中,它就可以正常工作。

我该如何修复这个错误?或者有没有更好的方法来绘制这个图?

任何帮助深表感谢

!缺失数字,视为零。t l.40 \end{groupplot} ?

这是示例代码。

\documentclass[tikz,border=3.14mm]{standalone} 
\usepackage{pgfplots} \pgfplotsset{compat=1.16} 
\usepgfplotslibrary{groupplots} 

\begin{filecontents*}{myfile.csv}
 SAE;Affected categories;red;green;blue
 0.01;2;204;0;255
 0.01;3;204;0;255
 0.02;25;24;8;255
 0.03;17;113;45;255
 0.04;2;204;0;255
\end{filecontents*}

\begin{document}
\pgfplotstableread[col sep = semicolon]{myfile.csv}\myfile

\begin{tikzpicture}%
 \begin{groupplot}[]
  \nextgroupplot[%
   ylabel={Affected categories}
  ]%
  \addplot[
   scatter,%
   scatter/@pre marker code/.code={%
    \edef\temp{\noexpand\definecolor{mapped color}{RGB}{\pgfplotspointmeta}}%
    \temp
    \scope[draw=mapped color,fill=mapped color]%
   },%
   scatter/@post marker code/.code={%
    \endscope
   },%
   only marks,     
   mark=*,
   point meta={TeX code symbolic={%
    \edef\pgfplotspointmeta{\thisrow{red},\thisrow{green},\thisrow{blue}}%
   }},
  ] 
  table [x = {SAE}, y = {Affected categories}, col sep=semicolon]{\myfile};     
\end{groupplot}
\end{tikzpicture}

\end{document}

答案1

的行为

\addplot[<options>] table[<options>] {<file>};

\addplot[<options>] table[<options>] {\macro};

并不完全相同。这一点已经指出这里。“更容易处理”的选项是第一个。因此,你只需这样做就可以避免所有问题

\documentclass[tikz,border=3.14mm]{standalone} 
\usepackage{pgfplots} 
\pgfplotsset{compat=1.16} 
\usepgfplotslibrary{groupplots} 

\begin{filecontents*}{myfile.csv}
 SAE;Affected categories;red;green;blue
 0.01;2;204;0;255
 0.01;3;204;0;255
 0.02;25;24;8;255
 0.03;17;113;45;255
 0.04;2;204;0;255
\end{filecontents*}

\begin{document}
\pgfplotstableread[col sep=semicolon]{myfile.csv}\myfile

\begin{tikzpicture}%
 \begin{groupplot}[]
  \nextgroupplot[%
   ylabel={Affected categories}
  ]%
  \addplot[
   scatter,%
   scatter/@pre marker code/.code={%
    \edef\temp{\noexpand\definecolor{mapped color}{RGB}{\pgfplotspointmeta}}%
    \temp
    \scope[draw=mapped color,fill=mapped color]%
   },%
   scatter/@post marker code/.code={%
    \endscope
   },%
   only marks,     
   mark=*,
   point meta={TeX code symbolic={%
    \edef\pgfplotspointmeta{\thisrow{red},\thisrow{green},\thisrow{blue}}%
   }},
  ] 
  table [x = {SAE}, y = {Affected categories}, col sep=semicolon]{myfile.csv};     
\end{groupplot}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如果你确实需要使用宏,你可以咨询这个答案以及一些链接答案。如果您因为操作数据(例如对数据进行排序或删除了一些行)而需要使用宏,那么将结果表写入文件然后按上述方式使用仍然会更容易,例如这里

相关内容