Я пытаюсь построить 3 фигуры с помощью pgfplots рядом друг с другом. Для этого я создал 3 мини-страницы с размером 0.3\textwidth
, так что между ними есть немного места.
На каждой мини-странице я затем рисую следующую трубку (здесь в качестве MWE включена только одна трубка):
\documentclass{article}
\usepackage{pgfplots}
\usepackage[showframe]{geometry}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
name=plot2,
axis lines=middle, ticks=none,
width=\textwidth,
zmin=0, zmax=6,
xmin=-3, xmax=3,
ymin=-3, ymax=3,
xlabel={$X_1$}, ylabel={$X_2$}, zlabel={$t$},
title={TDSL}
]
\addplot3[%
opacity = 0.02,
fill opacity=0.5,
mesh/interior colormap name=hot,
surf,
colormap/hot,
faceted color=black,
z buffer = sort,
samples = 20,
variable = \u,
variable y = \v,
domain = 0:360,
y domain = 0:5,
]
({cos(u)}, {sin(u)}, {v});
\end{axis}
\end{tikzpicture}
\end{document}
который по идее width=\textwidth,
должен занимать всю ширину, но не занимает. Также заголовок "TDSL" находится очень высоко над рисунком, как будто там много пустого пространства, что делает сам рисунок меньше.
У меня вопрос, как сделать так, чтобы фигура имела указанную ширину?
решение1
Я думаю, вы неправильно поняли @user121799 (он же @marmot). Все работает как надо. Чтобы убедить вас, я добавил цвет фона оси и показываю результат ниже на первом изображении, которое является результатом следующего кода.
Когда вы уверены, что вам не нужно пространство по всем четырем направлениям, которые все еще будут в "рамке" оси, вы можете адаптировать график bounding box
. Результат показан ниже на втором изображении. Красный прямоугольник нужен только для отладки, чтобы показать адаптированную ограничивающую рамку. Подробности того, что нужно сделать, см. в комментариях в коде.
Как вы можете видеть на втором изображении, «просто» адаптация ограничивающей рамки не увеличивает до axis
. \textwidth
Таким образом, вам придется скорректировать width
значениевручнуютак что действительно используется полный \textwidth
. Я также сделал прокомментированное предложение для подходящего значения в коде.
% used PGFPlots v1.16
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{pgfplots}
\pgfplotsset{
% use this `compat` level or higher to position axis labels right
compat=1.8,
% for simplicity created a style of the original `axis` options
my axis style/.style={
width=\textwidth,
axis lines=middle,
ticks=none,
zmin=0, zmax=6,
xmin=-3, xmax=3,
ymin=-3, ymax=3,
xlabel={$X_1$}, ylabel={$X_2$}, zlabel={$t$},
title={TDSL},
% -----------------------------------------------------------------
% (added an axis background color for debugging purposes)
axis background/.style={
fill=blue!25,
opacity=0.5,
},
% -----------------------------------------------------------------
},
% for simplicity created a style for the `\addplot` command
my plot style/.style={
opacity=0.02,
fill opacity=0.5,
mesh/interior colormap name=hot,
surf,
faceted color=black,
z buffer=sort,
samples=20,
variable=\u,
variable y=\v,
domain=0:360,
y domain=0:5,
},
% a style to (almost) achieve what you want
my advanced axis style/.style={
my axis style,
% % because the `width` doesn't know about "correcting" the bounding box
% % you have to manually adjust the value to fit your needs (again)
% width=1.5\textwidth,
title style={
% move title above z-axis (arrow)
at={(axis top)},
% give the title node a name
% (which is later used to determine the bounding box of the plot)
name=axis title,
},
% define some helper coordinates to determine the needed/wanted bounding box
execute at end axis={
\coordinate (axis left) at (axis cs:\pgfkeysvalueof{/pgfplots/xmin},0,0);
\coordinate (axis right) at (axis cs:\pgfkeysvalueof{/pgfplots/xmax},0,0);
\coordinate (axis top) at (axis cs:0,0,\pgfkeysvalueof{/pgfplots/zmax});
%
\coordinate (axis bottom) at (axis cs:0,\pgfkeysvalueof{/pgfplots/ymin},0);
\coordinate (axis lower left) at (axis bottom -| axis left);
% % for the top coordinate we need to account for the title
% % unfortunately at this time the `(axis title)` coordinate is unavailable
% \coordinate (axis upper right) at (axis title.north -| axis right);
},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[my axis style]
\addplot3 [my plot style] ({cos(u)}, {sin(u)}, {v});
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
% don't calculate a bounding box yet
\begin{pgfinterruptboundingbox}
% use the modified/advanced axis style here
\begin{axis}[my advanced axis style]
\addplot3 [my plot style] ({cos(u)}, {sin(u)}, {v});
\end{axis}
\end{pgfinterruptboundingbox}
% -------------------------------------------------------------------------
% for debugging only
\draw [red] (axis lower left) rectangle (axis title.north -| axis right);
% -------------------------------------------------------------------------
% now we can set the bounding box using the helper coordinates
\useasboundingbox (axis lower left) rectangle (axis title.north -| axis right);
\end{tikzpicture}
\end{document}
Результат на первой странице:
Результат на второй странице: