绘制并非总是两个圆圈的维恩图

绘制并非总是两个圆圈的维恩图

我想知道绘制维恩图的包或简单方法。我需要绘制以下示例:

在此处输入图片描述

正如你所见,我的手绘技巧还不能胜任这项任务:)

我找到了名为的包venndiagram,它似乎可以帮助我处理 4 和 5,但不能处理其余部分。我的意思是,有时我只想显示其中一个圆圈,有时不显示任何圆圈,有时重叠,有时不重叠等等。我还找到了一个名为 just 的包,venn但它的文档似乎不太令人满意,所以我不知道它是否能帮助我。对我来说,这似乎是人们时不时会做的事情,所以我希望有人能提出其他建议?

答案1

draw您可以使用和参数为圆形和矩形添加一些选项到原始代码中fill。可以使用包即时修改代码xpatch,类似于维恩图轮廓

然后,您可以将这些参数中使用的命令设置为与要绘制的图表相对应的值。使用draw=none和空标签可以从图表中删除一个圆圈,fill=white如果矩形填充了 ,则使圆圈可见fill=lightgray。要恢复绘制“正常”图表,您需要将宏重置为默认值。

请注意,#6 不需要任何修改,这可以通过将提供的键设置overlap为负值来完成。

梅威瑟:

\documentclass{article}
\usepackage{venndiagram}
\usepackage{xpatch}

\def\framefill{none}
\def\afill{none}
\def\bfill{none}
\def\adraw{black}
\def\bdraw{black}

\makeatletter
% patch drawing of A and B
\xpatchcmd{\endvenndiagram2sets}
{%
\draw (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
\draw (\@venn@Bx,\@venn@By) circle (\@venn@radius);
}
{
\draw [draw=\adraw, fill=\afill] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
\draw [draw=\bdraw, fill=\bfill] (\@venn@Bx,\@venn@By) circle (\@venn@radius);
}
{\typeout{patch ok}}{\typeout{patch failed}}
% patch frame
\xpatchcmd{\endvenndiagram2sets}
{\draw (venn bottom left) rectangle (\@venn@w,\@venn@h);}
{\draw [fill=\framefill] (venn bottom left) rectangle (\@venn@w,\@venn@h);}
{\typeout{patch ok}}{\typeout{patch failed}}
\makeatother

\begin{document}
\begin{venndiagram2sets}
\fillA \fillB
\end{venndiagram2sets}
\begin{venndiagram2sets}
\fillACapB
\end{venndiagram2sets}

\begin{venndiagram2sets}[overlap=-0.75cm]
\fillA \fillB
\end{venndiagram2sets}

\def\bdraw{none}
\begin{venndiagram2sets}[labelB={}]
\fillA
\end{venndiagram2sets}
\def\framefill{lightgray}
\def\afill{white}
\begin{venndiagram2sets}[labelB={$A^c$}]
\end{venndiagram2sets}

\def\afill{none}
\def\adraw{none}
\begin{venndiagram2sets}[labelA={},labelB={}]
\end{venndiagram2sets}

\end{document}

结果:

在此处输入图片描述

相关内容