以下代码绘制了两个文件的数据。我该如何修改代码,以便根据数据文件中第一个 xy 对属于哪个象限来选择 addplot 的颜色?例如,假设我希望源自第二象限和第三象限的图分别为绿色和洋红色,那么 tmp1.dat 和 tmp2.dat 应分别绘制为绿色和洋红色。
\documentclass[]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{filecontents}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{filecontents}{tmp1.dat}
x y
-1 1
0 0
1 1
\end{filecontents}
\begin{filecontents}{tmp2.dat}
x y
-1 -1
0 0
1 -1
\end{filecontents}
\begin{tikzpicture}
\begin{axis}
\foreach \i in {1,2}
{
\addplot table {tmp\i.dat};
};
\end{axis}
\end{tikzpicture}
答案1
这读作第一的从数据文件中获取坐标并相应地为图表着色。颜色列表存储在中\LstColors
,象限的编号可以说是非常规的,但可以更改。
\documentclass[]{standalone}
\usepackage{pgfplots}
\usepackage{filecontents}
\pgfplotsset{compat=1.16}
\newcommand*{\ReadOutElement}[4]{%
\pgfplotstablegetelem{#2}{[index]#3}\of{#1}%
\let#4\pgfplotsretval}
\def\LstColors{"green","magenta","orange","red"}
\begin{document}
\begin{filecontents}{tmp1.dat}
x y
-1 1
0 0
1 1
\end{filecontents}
\begin{filecontents}{tmp2.dat}
x y
-1 -1
0 0
1 -1
\end{filecontents}
\begin{tikzpicture}
\begin{axis}
\foreach \i in {1,2}
{\pgfplotstableread{tmp\i.dat}\datatable
\ReadOutElement{\datatable}{0}{0}{\myx}
\ReadOutElement{\datatable}{0}{1}{\myy}
\pgfmathtruncatemacro{\quadrant}{2*ifthenelse(\myx<0,0,1)+ifthenelse(\myy<0,0,1)}
\pgfmathsetmacro{\mycolor}{{\LstColors}[\quadrant]}
\edef\temp{\noexpand\addplot[color=\mycolor] table {tmp\i.dat};}
\temp
};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
假设以下是所需的输出,您可以使用\pgfplotscreateplotcyclelist
如下面的 MWE 所示:
\documentclass[]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{filecontents}
\pgfplotsset{compat=1.16}
\pgfplotscreateplotcyclelist{mylist}{%
draw=magenta,every mark/.append style={solid, fill=magenta},mark=*\\ %1
draw=green,every mark/.append style={solid,fill=green}, mark=*\\%2
}
\begin{document}
\begin{filecontents}{tmp1.dat}
x y
-1 1
0 0
1 1
\end{filecontents}
\begin{filecontents}{tmp2.dat}
x y
-1 -1
0 0
1 -1
\end{filecontents}
\begin{tikzpicture}
\begin{axis}[cycle list name=mylist]
\foreach \i in {1,2}
{
\addplot table {tmp\i.dat};
};
\end{axis}
\end{tikzpicture}
\end{document}