Estoy intentando trazar 3 figuras usando pgfplots una al lado de la otra. Para ello he creado 3 minipáginas con un de 0.3\textwidth
, para que quede un poco de espacio entre ellas.
Luego, en cada minipágina, trazo el siguiente tubo (aquí, como MWE, solo se incluye un tubo)
\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}
que según width=\textwidth,
debería ocupar todo el ancho, pero no es así. Además, el título "TDSL" está muy por encima de la figura, como si hubiera muchos espacios en blanco que hacen que la figura real sea más pequeña.
Mi pregunta es ¿cómo puedo hacer para que la figura tenga el ancho especificado?
Respuesta1
Creo que no entiendes a @user121799 (también conocido como @marmot). Todo funciona como deberia. Para convencerte, agregué un color de fondo de eje y muestro el resultado a continuación en la primera imagen, que es el resultado del siguiente código.
Cuando esté seguro de que no necesita el espacio en las cuatro direcciones que todavía estarían en el "cuadro" del eje, puede adaptar el bounding box
gráfico. Un resultado se muestra a continuación en la segunda imagen. El rectángulo rojo es solo para fines de depuración y muestra el cuadro delimitador adaptado. Para obtener detalles sobre lo que se debe hacer para hacerlo, consulte los comentarios en el código.
Como puede ver en la segunda imagen, "simplemente" adaptar el cuadro delimitador no aumenta el tamaño axis
del archivo \textwidth
. Por lo tanto hay que ajustar el width
valor.a manopara que realmente \textwidth
se aproveche el completo. También hice una sugerencia comentada para un valor adecuado en el código.
% 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}
Resultado de la primera página:
Resultado de la segunda página: