# Composite function set diagram

Would anyone be kind enough to help me with the finishing touch of the following beautiful diagram? I need to draw the curved yellow line.

Thank you

\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,shapes,fit,calc}
\begin{document}
COMPOSITE FUNCTIONS\\
\begin{center}
\begin{tikzpicture}[
>=stealth,
bullet/.style={
fill=black,
circle,
minimum width=1pt,
inner sep=1pt
},
projection/.style={
->,
thick,
shorten <=2pt,
shorten >=2pt
},
every fit/.style={
ellipse,
draw,
inner sep=0pt
}
]
\node at (2,4.7) {$f$};
\draw[projection] (1,4.5) -- (3,4.5);
\node at (0,5) {$X$};
\node[bullet,label=below:$x$]    at (0,2.5){};
\node at (4,5) {$Y$};
\node[bullet,label=below:$f(x)$] at (4,2.5){};
\node at (6,4.7) {$g$};
\draw[projection] (5,4.5) -- (7,4.5);
\node at (8,5) {$Z$};
\node[bullet,label=below:$g\big(f(x)\big)$] at (8,2.5){};

\draw (0,2.5) ellipse (1.02cm and 2.2cm);
\draw (4,2.5) ellipse (1.02cm and 2.2cm);
\draw (8,2.5) ellipse (1.02cm and 2.2cm);

\draw[projection] (0.3,2.5) -- (3.7,2.5);
\draw[projection] (4.3,2.5) -- (7.7,2.5);
\end{tikzpicture}
\newline
\end{center}
\end{document}


One way to do it is to use the to syntax and speciy the out and in angles:

\draw [line width=8pt, yellow, shorten <=0.25cm, shorten >=0.6cm, ->]
(START.south) to[out=-50, in=-120, distance=4cm, ] (END);


## Code:

\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,shapes,fit,calc}
\begin{document}
COMPOSITE FUNCTIONS\\
\begin{center}
\begin{tikzpicture}[
>=stealth,
bullet/.style={
fill=black,
circle,
minimum width=1pt,
inner sep=1pt
},
projection/.style={
->,
thick,
shorten <=2pt,
shorten >=2pt
},
every fit/.style={
ellipse,
draw,
inner sep=0pt
}
]
\node at (2,4.7) {$f$};
\draw[projection] (1,4.5) -- (3,4.5);
\node at (0,5) {$X$};
\node[bullet,label=below:$x$] (START)   at (0,2.5){};
\node at (4,5) {$Y$};
\node[bullet,label=below:$f(x)$] at (4,2.5){};
\node at (6,4.7) {$g$};
\draw[projection] (5,4.5) -- (7,4.5);
\node at (8,5) {$Z$};
\node[bullet,label=below:$g\big(f(x)\big)$] (END) at (8,2.5){};

\draw [line width=8pt, yellow, shorten <=0.25cm,, shorten >=0.6cm, ->] (START.south) to[out=-50, in=-120, distance=4cm, ] (END);

\draw (0,2.5) ellipse (1.02cm and 2.2cm);
\draw (4,2.5) ellipse (1.02cm and 2.2cm);
\draw (8,2.5) ellipse (1.02cm and 2.2cm);

\draw[projection] (0.3,2.5) -- (3.7,2.5);
\draw[projection] (4.3,2.5) -- (7.7,2.5);
\end{tikzpicture}
\newline
\end{center}
\end{document}


I know this is already answered, but I'll still post my solution in case you find something useful. Since Peter Grill has already shown you how to use to with in and out, I present here a way that uses controls:

\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,shapes,fit,calc}
\begin{document}
\textsc{Composite Functions:}
\begin{center}
\begin{tikzpicture}[
>=stealth,
bullet/.style={
fill=black,
circle,
inner sep=1pt
},
projection/.style={
->,
thick,
shorten <=2pt,
shorten >=2pt
},
]

\node [bullet, label=below:$$x$$] (x) at (-1, -0.5) {};
\node[font=\large] (X) at (0, 4) {$$X$$};

\begin{scope}[xshift=4cm]
label=above:$$f(x)$$] (fx) at (0.3, 2) {};
\node[font=\large] (Y) at (0, 4) {$$Y$$};
\end{scope}
\begin{scope}[xshift=8cm]
label=below:$$g(f(x))$$] (gfx) at (-0.5, -0.1) {};
\node[font=\large] (Z) at (0, 4) {$$Z$$};
\end{scope}

\draw [projection] (x) -- (fx);
\draw [projection] (fx) -- (gfx);
\draw [projection] (X) -- (Y)
node [pos=0.5, above] {$$f$$};
\draw [projection] (Y) -- (Z)
node [pos=0.5, above] {$$g$$};
\draw [out=45, in=180-45, projection, line width=1.5pt, red!80!black]
(X) .. controls ++(1, 1) and ++(-1, 1) .. (Z)
node [pos=0.5, above] {$$f \circ g$$};
\end{tikzpicture}
\end{center}
\end{document}


which produces:

• That's actually what to does in the background. Commented Feb 12, 2016 at 15:32
\begin{center}
\begin{tikzpicture}[
>=stealth,
bullet/.style={
fill=black,
circle,
inner sep=1pt
},
projection/.style={
->,
thick,
shorten <=2pt,
shorten >=2pt
},
]

\node[font=\large] (X) at (0, 4) {$$X_1$$};

\begin{scope}[xshift=4cm]
\node[font=\large] (Y) at (0, 4) {$$X_2$$};
\end{scope}
\begin{scope}[xshift=8cm]
\node[font=\large] (Z) at (0, 4) {$$X_3$$};
\end{scope}

\draw [projection] (X) -- (Y)
node [pos=0.5, above] {$$f$$};
\draw [projection] (Y) -- (Z)
node [pos=0.5, above] {$$g$$};
\draw [out=45, in=180-45, projection, line width=1.5pt, red!80!black]
(X) .. controls ++(1, 1) and ++(-1, 1) .. (Z)
node [pos=0.5, above] {$$g \circ f$$};
\end{tikzpicture}
\end{center}

• Welcome to TeX.SE! What is in your answer different from others two? You should provide MWE )Minimal Working Example), not just code fragment and add image, which ir produce. Commented Mar 27, 2023 at 1:52