如何让 pgfplots 中的 \draw 工作的颜色循环列表?

如何让 pgfplots 中的 \draw 工作的颜色循环列表?

我有 MWE,其中一条线由角度指定,一个圆由 \draw 指定。我能够使用 \addplot 绘制其他线条的颜色循环。但是,它不适用于 \draw。如何让使用 \draw 绘制的线条的颜色循环工作?

平均能量损失

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{
    compat=1.9,
    }

\begin{document}
\begin{figure}[h]
\begin{tikzpicture}
    \begin{axis}[
        axis equal,
        xlabel=x,
        ylabel=y,
        cycle list name=exotic,
        ]
        \addplot+[solid,line width=1.0pt] coordinates {(10,10) (1,1)};
        \addplot+[dotted,line width=1.0pt] coordinates {(10,1) (1,10)};
        \addplot+[loosely dotted,line width=1.0pt] coordinates {(1,1) (1,10)};
        \draw (1,1) -- ++(45:2cm) -- ++(90:3cm);
        \draw[solid,line width=1.0pt] (axis cs:5.5,5.5) circle [radius=1];
    \end{axis}
\end{tikzpicture}
\end{figure}
\end{document}

答案1

我不确定您是否/如何可以访问的当前状态并将cycle list其应用于\draw,但您也可以使用来完成所展示的所有部分\addplot

我展示了两种使用相对坐标绘制直线的方法。其中一种方法(见\addplot下文第四种)只有在点很少的情况下才实用。另一种方法更灵活。您只需在表中指定相对坐标,然后通过 计算累积和(即绝对坐标)pgfplotstable

该圆圈是一个简单的参数图。

代码输出

\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{
    compat=1.9,
    }

% read in numbers
\pgfplotstableread{
x y
1 1
2*cos(45) 2*cos(45)
0 3
}\data

% create new columns with cumulative sum
\pgfplotstablecreatecol[create col/expr={\pgfmathaccuma+\thisrow{x}}]{cumx}{\data}
\pgfplotstablecreatecol[create col/expr={\pgfmathaccuma+\thisrow{y}}]{cumy}{\data}

\begin{document}
\begin{figure}[h]
\begin{tikzpicture}
    \begin{axis}[
        axis equal,
        xlabel=x,
        ylabel=y,
        cycle list name=exotic,
        ]
        \addplot+[solid,line width=1.0pt] coordinates {(10,10) (1,1)};
        \addplot+[dotted,line width=1.0pt] coordinates {(10,1) (1,10)};
        \addplot+[loosely dotted,line width=1.0pt] coordinates {(1,1) (1,10)};
        \addplot +[mark size=5pt,ultra thick] coordinates {(1,1)({1+2*cos(45)},{1+2*sin(45)})({1+2*cos(45)},{4+2*sin(45)})};
        \addplot table[x=cumx,y=cumy] {\data};
        \addplot +[solid,line width=1.0pt,domain=0:360,samples=50,mark repeat=10] ({5.5+cos(x)},{5.5+sin(x)});
    \end{axis}
\end{tikzpicture}
\end{figure}
\end{document}

答案2

您可以通过标记图来访问样式

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}
\begin{figure}[h]
\begin{tikzpicture}
    \begin{axis}[
        axis equal,
        xlabel=x,
        ylabel=y,
        cycle list name=exotic,
        ]
        \addplot+[solid,line width=1.0pt] coordinates {(10,10) (1,1)};\label{plot:1}
        \addplot+[dotted,line width=1.0pt] coordinates {(10,1) (1,10)};\label{plot:2}
        \addplot+[loosely dotted,line width=1.0pt] coordinates {(1,1) (1,10)};
        \draw[/pgfplots/refstyle={plot:1}] (1,1) -- ++(45:2cm) -- ++(90:3cm);
        \draw[/pgfplots/refstyle={plot:2}] (axis cs:5.5,5.5) circle [radius=1];
    \end{axis}
\end{tikzpicture}
\end{figure}
\end{document}

在此处输入图片描述

相关内容