我想给完整的图表上色。但是,区域的填充覆盖了边缘和其他颜色。最好的办法是,当区域重叠时,颜色可以“混合”,同时显示边缘。这可能吗?至少可以通过这种笨拙的着色显示边缘吗?代码如下(我在这里找不到任何好的图片 - 感谢建议)。
\begin{center}
\begin{eqnarray*}
\begin{tikzpicture}
\tikzstyle{vertex} = [draw,circle,fill=black,inner sep = 1.5pt]
\node[vertex] (1) [label = above: $a$] at (0,2) {};
\node[vertex] (2) [label = below: $b$] at (1,-1/2) {};
\node[vertex] (3) [label = below: $c$] at (-1,-1/2) {};
\node[vertex] (4) [label = above: $f$] at (2,5) {};
\node[vertex] (5) [label = below: $g$] at (-4,3/2) {};
\node[vertex] (6) [label = below: $h$] at (4,-3) {};
\draw [] (0,2) -- (1,-1/2) -- (-1,-1/2) -- cycle;
\draw [fill = yellow] (0,2) -- (-1,-1/2) -- (2,5) -- cycle
(0,2) -- (1,-1/2) -- (2,5) -- cycle
(1,-1/2) -- (-1,-1/2) -- (2,5) -- cycle;
\draw [fill = lime] (0,2) -- (1,-1/2) -- (-4,3/2) -- cycle
(0,2) -- (-1,-1/2) -- (-4,3/2) -- cycle
(1,-1/2) -- (-1,-1/2) -- (-4,3/2) -- cycle;
\draw (6) to [bend left] (5);
\end{tikzpicture}
\end{eqnarray*}
\end{center}
提前致谢。
答案1
最简单的方法就是,如上所述,仅指定opacity=<degree>
不透明度的范围从零(透明)到 1(不透明)。fill opacity
仅适用于填充、draw opacity
仅适用于绘图和text opacity
仅适用于文本。
但是,我不会将其应用于fill opacity
整个图片,因为它也会应用于填充的黑色圆圈,而这可能不是您想要的。相反,只将其应用于为图表着色的命令。
例如(改变颜色以使效果更明显):
...
\draw (0,2) -- (1,-1/2) -- (-1,-1/2) -- cycle;
\draw [fill = magenta, fill opacity=.5] (0,2) -- (-1,-1/2) -- (2,5) -- cycle (0,2) -- (1,-1/2) -- (2,5) -- cycle (1,-1/2) -- (-1,-1/2) -- (2,5) -- cycle;
\draw [fill = cyan, fill opacity=.5] (0,2) -- (1,-1/2) -- (-4,3/2) -- cycle (0,2) -- (-1,-1/2) -- (-4,3/2) -- cycle (1,-1/2) -- (-1,-1/2) -- (-4,3/2) -- cycle;
\draw (6) to [bend left] (5);
...
这可能是你想要的,也可能不是。如果是,你可以停止阅读,去和猫一起玩*。
如果您不想要不透明,而只想混合颜色,则可以使用除 之外的混合模式normal
。默认情况下,当您在现有的彩色像素上绘制新的完全不透明像素时,新颜色会取代旧颜色。但是,这不是唯一的可能性。例如,另一个选项是使用overlay
混合。
...
[
vertex/.style = {% \tikzstyle is deprecated
draw,
circle,
fill=black,
inner sep = 1.5pt,
},
blend group=overlay,
]
\draw [fill = magenta] (0,2) -- (-1,-1/2) -- (2,5) -- cycle (0,2) -- (1,-1/2) -- (2,5) -- cycle (1,-1/2) -- (-1,-1/2) -- (2,5) -- cycle;
\draw [fill = cyan] (0,2) -- (1,-1/2) -- (-4,3/2) -- cycle (0,2) -- (-1,-1/2) -- (-4,3/2) -- cycle (1,-1/2) -- (-1,-1/2) -- (-4,3/2) -- cycle;
\draw (6) to [bend left] (5);
...
您可能会发现一些不满意的地方。一是下面的黑线虽然可见,但仍有部分被遮盖。二是一些填充物变得不透明或着色加倍(或更多)。有时这是您想要的。有时不是。
你可能正在寻找的是这样的:
在这种情况下,首先在图片的主层上绘制并标记节点,同时用坐标定义相关点,原因我认为Heiko 解释道当我在提问关于它,打击乐很好心地回答,尽管这可能是一个愚蠢的问题。
background
然后使用该库在图层上填充颜色backgrounds
,以便它们不会遮挡节点。最后,利用坐标在主层上绘制线条。
为了更容易跟踪,相关坐标使用相应顶点的标签来命名。
\documentclass[tikz,border=10pt,multi]{standalone}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}
[
vertex/.style = {%
draw,
circle,
fill=black,
inner sep = 1.5pt,
},
]
\foreach \i/\k/\m [count=\j] in {(0,2)/a/above, (1,-.5)/b/below, (-1,-2)/c/below, (2,5)/f/above, (-4,-1.5)/g/below, (4,-3)/h/below}
{
\node [coordinate] (\k) at \i {} ;
\node [vertex, label=\m:$\k$] at (\k) {};
}
\draw (a) -- (b) -- (c) -- cycle;
\begin{scope}[on background layer]
\begin{scope}[blend group=overlay]
\fill [magenta] (a) -- (c) -- (b) -- (f) -- cycle;
\fill [cyan] (a) -- (b) -- (c) -- (g) -- cycle;
\end{scope}
\end{scope}
\draw (a) -- (c) -- (f) -- cycle (a) -- (b) -- (f) -- cycle (b) -- (c) -- (f) -- cycle (a) -- (b) -- (g) -- cycle (a) -- (c) -- (g) -- cycle (b) -- (c) -- (g) -- cycle (h) to [bend left] (g);
\end{tikzpicture}
\end{document}
我喜欢这个版本,因为它提供的颜色看起来几乎是半透明的,并且以直观的方式自动混合它们。(也就是说,我不必手动混合颜色,也不会得到使用透明度时得到的暗淡和意想不到的效果。)当然,您的公里数可能会有很大差异。
- 不包括猫。
答案2
绘制和填充的顺序很重要。首先应该填充区域,然后才能在其上绘制线条。
由于非零填充规则,黄色区域未完全填充,pgf
详情请参阅手册。简而言之,第一个黄色三角形的角按逆时针顺序排列,第三个三角形的角按顺时针顺序排列。如果要合并区域,请使用相同的顺序。
以下示例简化了填充和绘制。首先定义坐标(稍后用坐标代替明确的数字)。然后将填充的三角形合并为三个区域:黄色区域、黄绿色区域和交叉区域,其中颜色由两种颜色组成。然后绘制线条,首先是外线,然后是内连接线,无需绘制两次线条并避免尖角。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\path
( 0, 2) coordinate (a)
( 1, -0.5) coordinate (b)
(-1, -0.5) coordinate (c)
( 2, 5) coordinate (f)
(-4, 1.5) coordinate (g)
( 4, -3) coordinate (h)
;
\fill [yellow] (a) -- (b) -- (f) -- cycle;
\fill [lime] (a) -- (g) -- (c) -- cycle;
\fill [yellow!50!lime] (a) -- (b) -- (c) -- cycle;
\draw
(a) -- (f) -- (b) -- (c) -- (g) -- cycle
(a) -- (c)
(a) -- (b)
(c) -- (f)
(b) -- (g)
(h) to [bend left] (g);
\tikzstyle{vertex} = [draw,circle,fill=black,inner sep = 1.5pt]
\node[vertex] [label = above: $a$] at (a) {};
\node[vertex] [label = below: $b$] at (b) {};
\node[vertex] [label = below: $c$] at (c) {};
\node[vertex] [label = above: $f$] at (f) {};
\node[vertex] [label = below: $g$] at (g) {};
\node[vertex] [label = below: $h$] at (h) {};
\end{tikzpicture}
\end{document}
答案3
要混合颜色,您可以使用透明度。类似于opacity=0.5
整个图片,但还有更多可能性。但是,黄绿色和黄色非常相似,混合效果不太好。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}[fill opacity=0.5]
\tikzstyle{vertex} = [draw,circle,fill=black,inner sep = 1.5pt]
\node[vertex] (1) [label = above: $a$] at (0,2) {};
\node[vertex] (2) [label = below: $b$] at (1,-1/2) {};
\node[vertex] (3) [label = below: $c$] at (-1,-1/2) {};
\node[vertex] (4) [label = above: $f$] at (2,5) {};
\node[vertex] (5) [label = below: $g$] at (-4,3/2) {};
\node[vertex] (6) [label = below: $h$] at (4,-3) {};
\draw [] (0,2) -- (1,-1/2) -- (-1,-1/2) -- cycle;
\draw [fill = yellow] (0,2) -- (-1,-1/2) -- (2,5) -- cycle
(0,2) -- (1,-1/2) -- (2,5) -- cycle
(1,-1/2) -- (-1,-1/2) -- (2,5) -- cycle;
\draw [fill = lime] (0,2) -- (1,-1/2) -- (-4,3/2) -- cycle
(0,2) -- (-1,-1/2) -- (-4,3/2) -- cycle
(1,-1/2) -- (-1,-1/2) -- (-4,3/2) -- cycle;
\draw (6) to [bend left] (5);
\end{tikzpicture}
\end{center}
\end{document}