我正在尝试自定义绘图的标记(使用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}
这样,我得到以下结果:
我想要得到的是:
(我通过创建 和 手动完成了此操作mymarksblue
,mymarksyellow
但mymarksgreen
我想避免为实际文档中的每种颜色创建一种标记,因为它们有很多)
太感谢了!
西蒙
答案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}