How can I fit the text squarely inside the circles without it overlapping like this?
\documentclass[tikz,border=12pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
%\usepgfplotslibrary{external}
%\tikzexternalize
\begin{document}
\def\firstcircle{(90:1cm) circle (2.5cm)}
\def\secondcircle{(210:2.5cm) circle (2.5cm)}
\def\thirdcircle{(330:2.5cm) circle (2.5cm)}
\def\fourthcircle{(90:-3.5cm) circle (2.5cm)}
%\tikzsetnextfilename{4way_venn}
\begin{tikzpicture}
\begin{scope}[ fill opacity=0.5]
\fill[red] \firstcircle;
\fill[green] \secondcircle;
\fill[blue] \thirdcircle;
\fill[cyan] \fourthcircle;\end{scope}
% \begin{scope}
% \clip \firstcircle;
% \clip \secondcircle;
% \clip \thirdcircle;
%\fill[cyan]\fourthcircle;
% \end{scope}
\draw \firstcircle node[text=black,above] {CO$_2$ reduction};
\draw \secondcircle node [text=black, left=1cm] {Cost-effectiveness};
\draw \thirdcircle node [text=black,right=-0.4cm] {Infection control};
\draw \fourthcircle node [text=black,below=1cm]{Customer satisfaction};
\end{tikzpicture}
\end{document}
left=1cm
option, reducing it a little. That's what is pushing the text so far left. But I understand that you would prefer an automagical solution.:)