Pgfplots 根据表中的第一行设置 addplot 的颜色

Pgfplots 根据表中的第一行设置 addplot 的颜色

以下代码绘制了两个文件的数据。我该如何修改代码,以便根据数据文件中第一个 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}

相关内容