Alinhar tikzpicture redimensionada em subfiguras

Alinhar tikzpicture redimensionada em subfiguras

Quero dimensionar algumas das minhas imagens tikz em subfiguras ao longo do eixo y para economizar espaço. Mas quando dimensionadas, as imagens não se alinham mais. Quero escalá-los para economizar espaço vertical. Não quero dimensionar a altura do eixo diretamente porque então os pequenos ticks (automáticos) desaparecem (aliás, eu realmente gostaria de tê-los na figura certa também). O que eu tenho é

O que eu tenho

O que eu quero é (ou similar)

O que eu quero

Meu código é

\documentclass{article}
\usepackage{subcaption}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\pgfplotsset{compat=newest}
\begin{filecontents}{tabelle1.tex}
4   36.56   26.68
128 24298.04 300000
\end{filecontents}
\begin{filecontents}{tabelle2.tex}
4   24004.4 24004.4
64  240034.08   251182.32
\end{filecontents}
\begin{document}
\hrule
\begin{figure}[tbph]
    \centering
    \begin{subfigure}[t]{0.45\textwidth}
        \centering
        \resizebox{1\textwidth}{!}{% %I want to them to fit in their subfigure
            \begin{tikzpicture}
                \footnotesize
                \begin{axis}[
                    yscale=0.7 % needed to reduce vertical space
                    ,height=\textwidth % fixed height and width for both, should lead to same scaling 
                    ,width=\textwidth % and therefore same size in the end, letting them sit together nicely
                    ,xtick=data
                    ,axis y line=left
                    ,ymin=10
                    ,ymode=log 
                    ,legend style={at={(1,0.1)},anchor=south east} % turn this off and its somewhere it should not be
                    ]                   
                    \addplot table [x index=0,y index=1] {tabelle1.tex};\addlegendentry{A}
                    \addplot table [x index=0,y index=2] {tabelle1.tex};\addlegendentry{B}
                \end{axis}
        \end{tikzpicture}
        }
        \caption{a caption}
    \end{subfigure}%
    \hfill%
    \begin{subfigure}[t]{0.45\textwidth}
        \centering
        \resizebox{1\textwidth}{!}{%
            \begin{tikzpicture}
                \footnotesize
                \begin{axis}[
                    yscale=0.7
                    ,height=\textwidth
                    ,width=\textwidth
                    ,xtick=data
                    ,axis y line=left
                    ,ymin=10000
                    ,ymode=log
                    ,legend style={at={(1,0.1)},anchor=south east}
                    ]
                    \addplot table [x index=0,y index=1] {tabelle2.tex};\addlegendentry{A}
                    \addplot table [x index=0,y index=2] {tabelle2.tex};\addlegendentry{B}
                \end{axis}
        \end{tikzpicture}
        }
        \caption{b caption}     
    \end{subfigure}
    \caption{main caption}
\end{figure}
\end{document}

Até agora descobri que parece haver alguma conexão yscaleentre ymodee legend style. Desligar yscaleou ymodedesligar faz com que funcione. legend styleàs vezes faz, não consegui encontrar uma regra. O destino foi compilado sem yscale. Eu quero os três. Para ser mais preciso: algo que proporciona o mesmo resultado.

Como faço para conseguir isso?

Tenho mais números semelhantes, então se eu aprender alguma coisa com isso, melhor ainda. Se necessário, reescrever tudo está ok.

Responder1

Editar:
Foram adicionados rótulos do eixo y e é mais correto adotar diagramas de largura a largura de \subfigures.

Em vez de dimensionar a imagem, é melhor adaptar sua largura à largura de subfigure:

\documentclass{article}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{subcaption}
\usepackage{pgfplots}
%\usepgfplotslibrary{groupplots}

\pgfplotsset{compat=1.18}
    \begin{filecontents}{tabelle1.tex}
    4   36.56   26.68
    128 24298.04 300000
    \end{filecontents}
    \begin{filecontents}{tabelle2.tex}
    4   24004.4 24004.4
    64  240034.08   251182.32
    \end{filecontents}

\begin{document}
    \begin{figure}[tbph]
\pgfplotsset{
    height=6cm, 
    width = \linewidth,     % <---
    xtick = data,
%    axis y line=left,      % <--- if you liked
    legend pos=south east,
            }
\begin{subfigure}[t]{0.5\textwidth}\raggedright
    \begin{tikzpicture}
\begin{semilogyaxis}[
    ymin=10,
    ylabel = some text,
                    ]
\addplot table [x index=0,y index=1] {tabelle1.tex};
\addplot table [x index=0,y index=2] {tabelle1.tex};
    \legend{A, B}
\end{semilogyaxis}
    \end{tikzpicture}
\caption{subfigure A caption}
\end{subfigure}
    \hfil
\begin{subfigure}[t]{0.5\textwidth}\raggedleft
    \begin{tikzpicture}
\begin{semilogyaxis}[
    ymin=10000,
    ylabel = some text,
                    ]
\addplot table [x index=0,y index=1] {tabelle2.tex};
\addplot table [x index=0,y index=2] {tabelle2.tex};
    \legend{A, B}
\end{semilogyaxis}
    \end{tikzpicture}
\caption{subfigure B caption}
\end{subfigure}%
\caption{Main caption}
    \end{figure}
\end{document}

insira a descrição da imagem aqui

(linhas vermelhas indicam bordas da caixa de texto)

Responder2

Usando um grupo de 2 colunas x 1 linha para alinhar as figuras.

As sublegendas foram inseridas como nós para facilitar a configuração e posicionamento.

b

\documentclass[12pt]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\usepgfplotslibrary{groupplots}

\usepackage{caption,subcaption}  

\usepackage{pgfplotstable}
\usepackage{tikz}

\begin{filecontents}{tabelle1.tex}
    4   36.56   26.68
    128 24298.04 300000
\end{filecontents}
\begin{filecontents}{tabelle2.tex}
    4   24004.4 24004.4
    64  240034.08   251182.32
\end{filecontents}

\begin{document}
    
    \begin{figure}[!htp]
        \centering\footnotesize
        \begin{tikzpicture}
            \begin{groupplot}[
                group style={
                    group name=my plots,
                    group size= 2 by 1,
                    horizontal sep =2.0cm,
                },
            legend style={at={(1.0,0.05)},anchor=south east},
            height=0.45\textwidth,
            width=0.45\textwidth,
            xtick=data,
            axis y line=left,
            ymode=log
                ]
                \nextgroupplot[ymin=10]                   
                    \addplot table [x index=0,y index=1] {tabelle1.tex};\addlegendentry{A}
                    \addplot table [x index=0,y index=2] {tabelle1.tex};\addlegendentry{B}
                
                \nextgroupplot[ymin=10000]
                \addplot table [x index=0,y index=1] {tabelle2.tex};\addlegendentry{A}
                \addplot table [x index=0,y index=2] {tabelle2.tex};\addlegendentry{B}
            \end{groupplot}
    
            \tikzset{SubCaption/.style={
                    text width=0.4\textwidth,
                    yshift=-3mm, 
                    align=center,anchor=north
            }}
            
            \node[SubCaption] at (my plots c1r1.south) {\subcaption{First graph a}\label{subplot:one}};         
            \node[SubCaption] at (my plots c2r1.south) {\subcaption{Second graph b}\label{subplot:two}};

        \end{tikzpicture}
        \caption{Main caption}\label{fig:plots}
    \end{figure}
    
\end{document}

Não acho que você precise da seta para o eixo y. Usando axis y line*=left,você obterá

c

informação relacionada