Ajustar el cuadro delimitador de la figura 3D

Ajustar el cuadro delimitador de la figura 3D

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 boxgrá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 axisdel archivo \textwidth. Por lo tanto hay que ajustar el widthvalor.a manopara que realmente \textwidthse 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:

imagen que muestra el resultado de la primera página del código anterior

Resultado de la segunda página:

imagen que muestra el resultado de la segunda página del código anterior

información relacionada