Есть две проблемы с вашим кодом.
Первое горизонтальное выравнивание фигур было неправильным, но это легко исправить, используя
\begin{subfigure}[b]{0.3\textwidth}
вместо
\begin{subfigure}[b!]{0.3\textwidth}
относительно ширины, то, что делается при создании среды подфигуры, - это создание министраницы указанной ширины. Но вы должны уважать эту ширину с вашим контентом , масштабирование не выполняется.
Например, если в подфигуре вы включаете изображение и задаете ему ширину \ linewidth, ширина будет соблюдаться. Но если вы дадите этому изображению ширину 15 см, возможно, оно будет больше, чем у вас. Но LaTeX будет уважать ваши директивы (и указывать на переполнение hbox).
Это проблема, которая у вас есть. Ваши сюжеты слишком велики и пересекаются.
Это можно исправить двумя способами.
Вы можете задать параметр width = \ linewidth для среды оси, но обычно для этого требуется переделать ваш график
Вы можете изменить масштаб коробки, созданной tikz. Наиболее гибкий способ сделать это с помощью пакета Adjustbox
\documentclass{article}
\usepackage{subcaption}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{adjustbox}
\begin{document}
\begin{figure}
\centering
\begin{subfigure}[b]{0.45\textwidth}
%%% \begin{adjustbox}{width=\linewidth} % rescale box
\begin{tikzpicture}
\begin{axis}[
%%% width=\linewidth, % or modify the plot width
axis y line = middle,
...
...
\end{axis}
\end{tikzpicture}
%%% \end{adjustbox} %
\end{subfigure}%
\hfill
\begin{subfigure}[b]{0.45\textwidth}
etc.
Добавление параметра ширины в окружение оси
Масштабирование с помощью Adjustbox
Кстати, если вы не собираетесь добавлять подзаголовки на свои графики, среда подфигуры бесполезна, и Вы можете просто поместить свои (должным образом масштабированные) картинки tikzpictures рядом друг с другом через \ hfill.