You can understand by looking at the title. What topic am I going to discuss in this tutorial? Yes, in this tutorial, I will teach you how to place two figures side by side.
Using the subfigure Environment
The subfigure environment inside a figure allows multiple images with individual captions. Width is usually set as a percentage for a balanced layout.
\documentclass[11pt]{article}
\usepackage[margin=1.5cm]{geometry}
\usepackage{graphicx,subcaption,lipsum}
\begin{document}
\begin{figure}[h]
\begin{subfigure}{.5\textwidth}
\centering
\includegraphics[width=1\linewidth]{image.jpg}
\caption{First subfigure}
\end{subfigure}%
\begin{subfigure}{.5\textwidth}
\centering
\includegraphics[width=1\linewidth]{image.jpg}
\caption{Second subfigure}
\end{subfigure}
\caption{Main caption}
\end{figure}
\lipsum[1][1-8]
\begin{figure}[h]
\begin{subfigure}{.5\textwidth}
\centering
\includegraphics[width=.9\linewidth]{image.jpg}
\caption{First subfigure}
\end{subfigure}%
\begin{subfigure}{.5\textwidth}
\centering
\includegraphics[width=.9\linewidth]{image.jpg}
\caption{Second subfigure}
\end{subfigure}
\caption{Main caption}
\end{figure}
\lipsum[3][1-8]
\begin{figure}[h]
\centering
\begin{subfigure}{.3\textwidth}
\includegraphics[width=.9\linewidth]{image.jpg}
\caption{First subfigure}
\end{subfigure}%
\begin{subfigure}{.3\textwidth}
\includegraphics[width=.9\linewidth]{image.jpg}
\caption{Second subfigure}
\end{subfigure}%
\begin{subfigure}{.3\textwidth}
\includegraphics[width=.9\linewidth]{image.jpg}
\caption{Third subfigure}
\end{subfigure}
\caption{Main caption}
\end{figure}
\end{document}
Output :
Each image has its own caption, making this method organized and clear.
Using \subfloat from the subfig Package
The \subfloat
command provides flexibility by allowing multiple images within a single figure environment, each with an individual caption.
\documentclass[11pt]{article}
\usepackage[margin=1.5cm]{geometry}
\usepackage{xcolor,graphicx,subfig,lipsum}
\begin{document}
\pagecolor{yellow!15}
\lipsum[1][1-9]
\begin{figure}[h]
\centering
\subfloat[First subfigure]{\includegraphics[width=.48\linewidth]{image.jpg}}
\subfloat[Second subfigure]{\includegraphics[width=.48\linewidth]{image.jpg}}
\caption{Without space}
\end{figure}
\lipsum[2][1-7]
\begin{figure}[h]
\centering
\subfloat[First subfigure]{\includegraphics[width=.49\linewidth]{image.jpg}}\hfill
\subfloat[Second subfigure] {\includegraphics[width=.49\linewidth]{image.jpg}}
\caption{Add space}
\end{figure}
\lipsum[2-3]
\begin{figure}[h]
\centering
\subfloat[First subfigure]{\includegraphics[width=.33\linewidth]{image.jpg}}\hfill
\subfloat[Second subfigure] {\includegraphics[width=.33\linewidth]{image.jpg}} \hfill
\subfloat[Third subfigure] {\includegraphics[width=.33\linewidth]{image.jpg}}
\caption{Add space}
\end{figure}
\lipsum[4][1-8]
\end{document}
Output :
You can use \hfill
or \quad
to adjust spacing between images.
Using the minipage Environment
The minipage
environment creates independent sections, making it easier to position images while maintaining precise control over alignment.
\documentclass[11pt]{article}
\usepackage[margin=1.5cm]{geometry}
\usepackage{graphicx,xcolor,subcaption,lipsum}
\begin{document}
\pagecolor{green!7!white}
\lipsum[1][1-5]
\vspace{.5cm}
\begin{figure}
\centering
\begin{minipage}{.5\textwidth}
\includegraphics[width=1\linewidth]{image.jpg}
\caption{Caption for first figure.}
\end{minipage}%
\begin{minipage}{.5\textwidth}
\includegraphics[width=1\linewidth]{image.jpg}
\caption{Caption for second figure.}
\end{minipage}
\end{figure}
\vspace{.5cm}
\lipsum[2][1-5]
\vspace{.5cm}
% Use without float env
\noindent\begin{minipage}{.5\textwidth}
\centering
\includegraphics[width=.9\linewidth]{image.jpg}
\captionof{figure}{Caption for first fig}
\end{minipage}%
\begin{minipage}{.5\textwidth}
\centering
\includegraphics[width=.9\linewidth]{image.jpg}
\captionof{figure}{Caption for Second fig}
\end{minipage}
\vspace{.5cm}
\lipsum[2][1-5]
\vspace{.5cm}
\noindent\begin{minipage}{.4\textwidth}
\centering
\includegraphics[width=.9\linewidth]{image.jpg}
\end{minipage}%
\begin{minipage}{.6\textwidth}
\centering
\includegraphics[width=.9\linewidth]{image.jpg}
\end{minipage}
\end{document}
Output :
This method doesn’t require additional packages, making it a lightweight solution.
multicol package
The multicol
is mainly used for text, but it can also structure images inside a multi-column layout. Since multicol
doesn’t support floats, \captionof{figure}
is used for captions.
\documentclass[11pt]{article}
\usepackage[margin=1.5cm]{geometry}
\usepackage{graphicx,xcolor,lipsum,multicol,caption}
\begin{document}
\pagecolor{red!7!white}
\lipsum[1][1-7]
\begin{multicols}{2}
\centering
\includegraphics[width=.98\linewidth]{image.jpg}
\captionof{figure}{Caption of Subfig }
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\captionof{figure}{Caption of Subfig}
\end{multicols}
\begin{multicols}{3}
\centering
\includegraphics[width=.98\linewidth]{image.jpg}
\captionof{figure}{Subfig X}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\captionof{figure}{Subfig Y}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\captionof{figure}{Subfig Z}
\end{multicols}
\begin{multicols}{4}
\centering
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\end{multicols}
\begin{multicols}{5}
\centering
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\end{multicols}
\lipsum[3][1-7]
\begin{multicols}{6}
\centering
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\columnbreak
\includegraphics[width=.98\linewidth]{image.jpg}
\end{multicols}
\lipsum[5]
\end{document}
Output :
Using \includegraphics Directly
A simple way to place images side by side is by using \includegraphics. However, this method doesn’t allow individual captions.
To adjust spacing, use \quad
, \hfill
, or \hspace{}
.
\documentclass[11pt]{article}
\usepackage{graphicx,xcolor,lipsum}
\usepackage[margin=1.5cm]{geometry}
\begin{document}
\pagecolor{red!5}
\lipsum[1][1-8]
\begin{figure}[h]
\centering
\includegraphics[width=.5\textwidth]{image.jpg}%
\includegraphics[width=.5\textwidth]{image.jpg}
\caption{Main Caption}
\end{figure}
\lipsum[2][1-8]
\begin{figure}[h]
\centering
\includegraphics[width=.4\textwidth]{image.jpg}\quad
\includegraphics[width=.4\textwidth]{image.jpg}
\caption{Main Caption}
\end{figure}
\lipsum[3][1-10]
\begin{figure}[h]
\centering
\includegraphics[width=.35\textwidth]{image.jpg}\hspace{1cm}
\includegraphics[width=.35\textwidth]{image.jpg}
\end{figure}
\lipsum[4][1-5]
\end{document}
Output :
Using tabular for Grid Layouts
If you need a structured grid of images, tabular works well.
\documentclass[11pt]{article}
\usepackage[margin=1.5cm]{geometry}
\usepackage{graphicx,lipsum}
\begin{document}
\lipsum[1][1-7]
\begin{figure}[h]
\centering
\begin{tabular}{cc}
\includegraphics[width=0.47\textwidth]{image.jpg} & \includegraphics[width=0.47\textwidth]{image.jpg} \\
Caption for first image & Caption for second image \\
\end{tabular}
\caption{Main caption for both images}
\end{figure}
\lipsum[2][1-8]
\begin{figure}[h]
\centering
\begin{tabular}{cc}
\includegraphics[width=0.4\textwidth]{image.jpg} & \includegraphics[width=0.4\textwidth]{image.jpg} \\
Caption for first image & Caption for second image \\
\end{tabular}
\caption{Main caption for both images}
\end{figure}
\lipsum[3][1-8]
\begin{figure}[h]
\centering
\begin{tabular}{ccc}
\includegraphics[width=0.3\textwidth]{image.jpg} & \includegraphics[width=0.3\textwidth]{image.jpg} &
\includegraphics[width=0.3\textwidth]{image.jpg} \\
Caption for first image & Caption for second image & Caption for Thrird image\\
\end{tabular}
\caption{Main caption for all images}
\end{figure}
\end{document}
Output :
Conclusion
Placing figures side by side in a LaTeX document is achievable through various methods, each with its own advantages. The subfigure
environment and subfloat
command from subfig
package offers structured and flexible approaches, respectively.
For more control, minipage
environment, multicol
package, and tabular
environment provides options to integrate figures within different multi-column layouts.
Hey, nice article! I still have one question tho. How to make two pictures that are different sizes align at the top of the pictures (not top of both of the captions, which always happens to me whenever im trying to fix it)? Im using minipage (and package float). Id really aprieciate your help, thanks!