我正在绘制热图/散点图,其中标记颜色根据分数确定。我已将分数映射到红色、绿色和蓝色值,并尝试根据 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}
如果你确实需要使用宏,你可以咨询这个答案以及一些链接答案。如果您因为操作数据(例如对数据进行排序或删除了一些行)而需要使用宏,那么将结果表写入文件然后按上述方式使用仍然会更容易,例如这里。