
В этом MWE, как я могу подогнать tikzpicture
выделенное пространство родительской плавающей среды ( figure
или subfigure
)?
\RequirePackage{luatex85}
\documentclass{article}
\usepackage{pgfplots,caption,subcaption,mwe}
\pgfplotsset{compat=newest}
\begin{document}
\begin{figure}
\begin{subfigure}[t]{0.3\textwidth}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-a};
\end{axis}
\end{tikzpicture}
\end{subfigure}
%
\begin{subfigure}[t]{0.3\textwidth}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-b};
\end{axis}
\end{tikzpicture}
\end{subfigure}
%
\begin{subfigure}[t]{0.3\textwidth}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-c};
\end{axis}
\end{tikzpicture}
\end{subfigure}
\end{figure}
\end{document}
Редактировать
Вывод кода ниже не приводит к тому, что подрисунки охватывают все, \textwidth
несмотря на то, что ширина каждой подрисунка равна 0.33\textwidth
.
\begin{figure}
\centering
\begin{subfigure}[t]{0.33\textwidth}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\textwidth]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-a};
\end{axis}
\end{tikzpicture}
\end{subfigure}
%
\begin{subfigure}[t]{0.33\textwidth}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\textwidth]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-b};
\end{axis}
\end{tikzpicture}
\end{subfigure}
%
\begin{subfigure}[t]{0.33\textwidth}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\textwidth]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-c};
\end{axis}
\end{tikzpicture}
\end{subfigure}
\end{figure}
\lipsum[1]
решение1
Причина, по которой вы получаете третью подфигуру на отдельной строке, заключается в том, что между подфигурами есть пробел. Разрыв строки в коде — это то же самое, что и пробел, поэтому вам нужно после %
. \end{subfigure}
То есть, вместо
\end{subfigure}
%
\begin..
тебе нужно
\end{subfigure}%
%
\begin..
или
\end{subfigure}%
\begin..
См. напримерДля чего используются знаки процента ( %
) в конце строк?
Вторая проблема заключается в том, что width
ключ для a pgfplots
axis
на самом деле неточен. Что pgfplots
действительно нужно, так это предположить, что ticklabels и метки осей занимают 45pt пространства за пределами самой оси. Поэтому он берет указанную ширину, вычитает 45pt и использует эту ширину для оси.
Вы не можете изменить 45pt на что-то другое, но вы можете рассчитать собственную ширину оси и использовать ключ, scale only axis
чтобы указать, что width
параметр применяется к оси, не обращая внимания на отметки/метки осей.
Более грубый метод — поместить все tikzpicture
в \resizebox
, и просто масштабировать его до ширины подрисунка. Проблема в том, что шрифты также изменяются в размере.
Наконец, обратите внимание, что если у вас нет подписей к этим subfigure
окружениям, то они бессмысленны и их можно выбросить.
Первая строка показывает эффект \resizebox
, во второй я использовал вычисленную ширину для осей, а в третьей то же самое, но без subfigure
окружений. showframe
Пакет печатает рамку вокруг текстовой области, это те линии, которые видны на скриншоте:
\RequirePackage{luatex85}
\documentclass{article}
\usepackage{pgfplots,subcaption,showframe}
\pgfplotsset{compat=newest}
\begin{document}
\begin{figure}
\centering
\begin{subfigure}[t]{0.33\textwidth}
\resizebox{\textwidth}{!}{\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\textwidth]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-a};
\end{axis}
\end{tikzpicture}}
\end{subfigure}%
%
\begin{subfigure}[t]{0.33\textwidth}
\resizebox{\textwidth}{!}{\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\textwidth]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-b};
\end{axis}
\end{tikzpicture}}
\end{subfigure}%
%
\begin{subfigure}[t]{0.33\textwidth}
\resizebox{\textwidth}{!}{\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\textwidth]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-c};
\end{axis}
\end{tikzpicture}}
\end{subfigure}
\pgfmathsetlengthmacro{\myaxiswidth}{0.33\textwidth-width(" 150 ")}% subtract width of widest ticklabel, with a space on each side
\begin{subfigure}[t]{0.33\textwidth}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-a};
\end{axis}
\end{tikzpicture}
\end{subfigure}%
%
\begin{subfigure}[t]{0.33\textwidth}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-b};
\end{axis}
\end{tikzpicture}
\end{subfigure}%
%
\begin{subfigure}[t]{0.33\textwidth}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-c};
\end{axis}
\end{tikzpicture}
\end{subfigure}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-a};
\end{axis}
\end{tikzpicture}%
\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-b};
\end{axis}
\end{tikzpicture}%
\begin{tikzpicture}
\begin{axis}[enlargelimits=false,width=\myaxiswidth,scale only axis]
\addplot graphics [
xmin=0,
xmax=50,
ymin=0,
ymax=150,
] {example-image-c};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}