EDIT:: I saw the question mentioned in here which the moderator considered mine duplicate. However, I couldn't see how mine is duplicate. My main problem is to write the text in the intersection of CAT B and CAT C.

I am trying to create the following Venn diagram. enter image description here

Following is my code and output:

\begin{scope}[blend group = soft light]
\fill[red!30!white]   ( 90:1.2) circle (2);
\fill[green!30!white] (210:1.2) circle (2);
\fill[blue!30!white]  (330:1.2) circle (2);
\node at ( 90:2)    {CAT A};
\node at ( 210:2)   {CAT B};
\node at ( 330:2)   {CAT C};
\node [font=\small] {text1, text2, text3, text4};

enter image description here

  • For line breaks in nodes, see tex.stackexchange.com/questions/123671/… Mar 19 '18 at 10:32
  • you might try the venndiagram package: ctan.org/pkg/venndiagram?lang=en
    – Ross
    Mar 19 '18 at 12:14
  • If you want to have the texts stacked, just use \node [font=\small,text width=1cm] {text1, text2, text3, text4}; instead of \node [font=\small] {text1, text2, text3, text4};.
    – user121799
    Mar 19 '18 at 15:04
  • How this question is duplicate??? I vote for reopenning it. Mar 19 '18 at 22:57
  • No one of the answers showed how to write in the intersections. Mar 19 '18 at 22:59

I provide two examples. The first has a different layout compared to what you posted because I recycled something I had done previously. The second example uses the venndiagram package.

This is the code:


\tikzset{venn circle/.style={draw=gray,text opacity=1,fill opacity=0.25,circle,minimum width=10cm,fill=#1,line width=2pt}}
\tikzset{label/.style={text width=1.5cm,font=\large\sffamily}}


    \begin{scope}[blend mode=screen]
          \node [venn circle = yellow] (A) at (0,0) {};
          \node [label] (A1) at (-2.5,0) {Cat A};
          \node [venn circle = green] (B) at (5,0) {};
          \node [label] (B1) at (7.5,0) {Cat B};  
          \node [venn circle = orange] (C) at (2.5,5) {};
          \node [label] (C1) at (2.5,6.25) {Cat C};
% Use a tabular to stack the text
          \node [label] (D) at (5,3.75){\begin{tabular}{l} text1,\\text2,\\text3,\\text4 \end{tabular}};

                         tikzoptions={text opacity=1,fill opacity=0.25},
                         labelOnlyBC={\begin{tabular}{l} text1,\\text2,\\text3,\\text4 \end{tabular}}]


This is the result: enter image description here enter image description here


You can use either

\node [font=\small, align=center] {text1, \\ text2, \\ text3, \\ text4};

as you need the align for several lines or

\node [font=\small, text width=1cm] {text1, text2, text3, text4};

Depending if you want it to happen automatically or manually.

enter image description here

  • I want the text in the intersection between A and C Mar 19 '18 at 23:00
  • give a position at the node: \node [font=\small,align=center] at (30:2.2) {text1, text2,\\ text3, text4}; and change the circle to \fill[red!30!white] ( 90:1.8) circle (3);
    – Shade
    Mar 20 '18 at 8:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.