\pgfdeclareplotmark 和绘图颜色

\pgfdeclareplotmark 和绘图颜色

我正在尝试自定义绘图的标记(使用Tikzpicture),以便除其他外,它们不是由给定的颜色组成,而是采用线条的颜色。

因此,我创建了一个定制标记,称为mymarks,使用\pgfdeclareplotmark

\pgfdeclareplotmark{mymarks}{
    \color{red}
    \pgfpathcircle{\pgfpointorigin}{4pt}\pgfusepath{fill}
    \color{white}
    \pgfpathcircle{\pgfpointorigin}{2pt}\pgfusepath{fill}
}

目前,由于声明\color{red},我的标记具有完美的形状,但始终是红色。但是,我希望它们具有它们所在曲线的颜色。例如,在下面的屏幕截图中,我希望它们在紫色曲线上为紫色,在黄色曲线上为黄色,在蓝色曲线上为蓝色。因此,我想使用类似的东西\color{\pgfcolor}(类似于\pgfpointorigin传递点坐标的东西),但这不起作用。

你知道该怎么做吗?

下面是我编写的一个简化示例:

\documentclass[12pt,a4paper]{book}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{pgfplots}

\pgfdeclareplotmark{mymarks}{
    \color{red}
    \pgfpathcircle{\pgfpointorigin}{4pt}\pgfusepath{fill}
    \color{white}
    \pgfpathcircle{\pgfpointorigin}{2pt}\pgfusepath{fill}
}


\begin{document}

\begin{tikzpicture}[xscale=1, yscale=1]
        \draw[->] (-0.5, 0) -- (11,0);
        \draw[->] (0, -0.5) -- (0,11);
        \draw [color=blue, line width=2pt] plot [mark = mymarks] coordinates {(0,0) (1,1) (2,2) (3,5) (4,8) (5,2) (6,9) (7,5) (8,4) (9,3) (10,1)};
        \draw [color=yellow, line width=2pt] plot [mark = mymarks] coordinates {(0,8) (1,7) (2,6) (3,4) (4,8) (5,7) (6,8) (7,9) (8,3) (9,1) (10,3)};
        \draw [color=green, line width=2pt] plot [mark = mymarks] coordinates {(0,4) (1,4) (2,4) (3,8) (4,3) (5,5) (6,3) (7,2) (8,7) (9,8) (10,7)};
    \end{tikzpicture}

\end{document}

这样,我得到以下结果:

在此处输入图片描述

我想要得到的是:

在此处输入图片描述

(我通过创建 和 手动完成了此操作mymarksbluemymarksyellowmymarksgreen我想避免为实际文档中的每种颜色创建一种标记,因为它们有很多)

太感谢了!

西蒙

答案1

在处理完全不同的事情时,我发现了pgfscope环境,它拯救了我。环境中设置的任何更改pgfscope都仅限于环境,因此我可以white在绘制每个点后轻松地将颜色更改为环境内的颜色:

\documentclass[12pt,a4paper]{book}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{pgfplots}

\pgfdeclareplotmark{mymarks}{
    \pgfpathcircle{\pgfpointorigin}{4pt}\pgfusepath{fill}
    \begin{pgfscope}
        \color{white}
        \pgfpathcircle{\pgfpointorigin}{2pt}\pgfusepath{fill}
    \end{pgfscope}
}

\begin{document}

\begin{tikzpicture}[xscale=1, yscale=1]
        \draw[->] (-0.5, 0) -- (11,0);
        \draw[->] (0, -0.5) -- (0,11);
        \draw [color=blue, line width=2pt] plot [mark = mymarks] coordinates {(0,0) (1,1) (2,2) (3,5) (4,8) (5,2) (6,9) (7,5) (8,4) (9,3) (10,1)};
        \draw [color=yellow, line width=2pt] plot [mark = mymarks] coordinates {(0,8) (1,7) (2,6) (3,4) (4,8) (5,7) (6,8) (7,9) (8,3) (9,1) (10,3)};
        \draw [color=green, line width=2pt] plot [mark = mymarks] coordinates {(0,4) (1,4) (2,4) (3,8) (4,3) (5,5) (6,3) (7,2) (8,7) (9,8) (10,7)};
    \end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容