我使用 绘制了一个维恩图tikzpicture
,不同的圆圈用不同的图案填充。我还使用 将matrix
图的图例绘制在侧面。为图的非重叠部分创建图例条目非常简单,因为它们只使用一种图案。但是如何在图例中指定两个重叠图案来指示图的重叠区域?
我迄今为止的代码:
\documentclass{book}
\usepackage{pgfplots,tikz}
\usetikzlibrary{matrix,patterns,positioning,svg.path}
\begin{document}
\begin{center}
\begin{tikzpicture}[
1/.style={shape=rectangle, pattern=north east lines},
2/.style={shape=rectangle, pattern=north west lines},
3/.style={shape=rectangle, pattern=vertical lines},
4/.style={shape=rectangle, pattern=dots}
]
\begin{scope}[local bounding box=venn]
\fill[1] (135:1) circle (2);
\fill[2] ( 45:1) circle (2);
\fill[3] (-90:1) circle (2);
\end{scope}
\matrix [draw,right=1em of venn]{
\node [1,label=right:1] {}; \\
\node [2,label=right:2] {}; \\
\node [3,label=right:3] {}; \\
\node [4,label=right:4] {}; \\
};
\end{tikzpicture}
\end{center}
\end{document}
您可能已经猜到了,图例中的第四个条目应该指的是图表的中心,但我用它来代替它了,dots
因为我不知道如何重叠所有三个模式。
答案1
您可以使用postaction
s 来叠加图案。我添加了
\node [1,postaction=2,label=right:$1\cup 2$] {}; \\
来说明这一点。您可以拥有多个postaction
。
\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{matrix,patterns,positioning}
\begin{document}
\begin{center}
\begin{tikzpicture}[
1/.style={shape=rectangle, pattern=north east lines},
2/.style={shape=rectangle, pattern=north west lines},
3/.style={shape=rectangle, pattern=vertical lines},
4/.style={shape=rectangle, pattern=dots}
]
\begin{scope}[local bounding box=venn]
\fill[1] (135:1) circle (2);
\fill[2] ( 45:1) circle (2);
\fill[3] (-90:1) circle (2);
\end{scope}
\matrix [draw,right=1em of venn]{
\node [1,label=right:1] {}; \\
\node [2,label=right:2] {}; \\
\node [3,label=right:3] {}; \\
\node [4,label=right:4] {}; \\
\node [1,postaction=2,label=right:$1\cap 2$] {}; \\
};
\end{tikzpicture}
\end{center}
\end{document}
答案2
这是我的建议。颜色会根据选项自动混合[opacity=.5]
。
\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{center}
\begin{tikzpicture}[opacity=.5]
\fill[red] (135:1) circle (2);
\fill[blue] (45:1) circle (2);
\fill[cyan] (-90:1) circle (2);
\path (4,0) node[matrix,draw]{
\node[fill=red,label=right:A] {}; \\
\node[fill=blue,label=right:B] {}; \\
\node[fill=cyan,label=right:C] {}; \\
\node[fill=red!50!blue!50!cyan,label=right:G] {}; \\
};
\end{tikzpicture}
\end{center}
\end{document}