Problema ao dimensionar uma imagem tikz

Problema ao dimensionar uma imagem tikz

Estou usando elsarticlea classe e preciso de ajuda para dimensionar minha imagem tikz.

\documentclass[numbers,preprint,review,12pt,sort&compress]{elsarticle}
\usepackage{tikz}

\begin{document}

\begin{figure}
    \centering
    \begin{tikzpicture}[scale=0.5]
        % Node styles
        \tikzstyle{circulo_vermelho}=[fill=red, draw=black, shape=circle]
        \tikzstyle{circulo_cinza}=[fill={rgb,255: red,128; green,128; blue,128}, draw=black, shape=circle]
        \tikzstyle{circulo_verde}=[fill=green, draw=black, shape=circle]
        \tikzstyle{circulo_amarelo}=[fill=yellow, draw=black, shape=circle]
        \tikzstyle{circulo_azul}=[fill=blue, draw=black, shape=circle]
        \tikzstyle{texto}=[fill=none, draw=none, shape=circle]
        % Edge styles
        \tikzstyle{seta}=[->]
        \node [style={circulo_cinza}] (0) at (0, 5) {};
        \node [style={circulo_cinza}] (1) at (0, 3.5) {};
        \node [style={circulo_cinza}] (2) at (0, 2) {};
        \node [style={circulo_vermelho}] (3) at (3.5, 5) {};
        \node [style={circulo_vermelho}] (4) at (3.5, 3.5) {};
        \node [style={circulo_vermelho}] (5) at (3.5, 2) {};
        \node [style={circulo_vermelho}] (6) at (7, 5) {};
        \node [style={circulo_vermelho}] (7) at (7, 3.5) {};
        \node [style={circulo_vermelho}] (8) at (7, 2) {};
        \node [style={circulo_cinza}] (9) at (0, -3) {};
        \node [style={circulo_cinza}] (10) at (0, -4.5) {};
        \node [style={circulo_cinza}] (11) at (0, -6) {};
        \node [style={circulo_azul}] (12) at (7, -3) {};
        \node [style={circulo_azul}] (13) at (7, -4.5) {};
        \node [style={circulo_azul}] (14) at (7, -6) {};
        \node [style={circulo_verde}] (15) at (11.5, 1) {};
        \node [style={circulo_verde}] (16) at (11.5, -0.5) {};
        \node [style={circulo_verde}] (17) at (11.5, -2) {};
        \node [style={circulo_vermelho}] (18) at (15.5, 1) {};
        \node [style={circulo_vermelho}] (19) at (15.5, -0.5) {};
        \node [style={circulo_vermelho}] (20) at (15.5, -2) {};
        \node [style={circulo_vermelho}] (21) at (19.5, 1) {};
        \node [style={circulo_vermelho}] (22) at (19.5, -0.5) {};
        \node [style={circulo_vermelho}] (23) at (19.5, -2) {};
        \node [style={circulo_amarelo}] (24) at (23.25, 1) {};
        \node [style={circulo_amarelo}] (25) at (23.25, -0.5) {};
        \node [style={circulo_amarelo}] (26) at (23.25, -2) {};
        \node [style=texto] (27) at (0, 6.75) {Static Input Layer};
        \node [style=texto] (28) at (0, 6) {4 Units};
        \node [style=texto] (29) at (3.5, 6.75) {Static Dense Layer};
        \node [style=texto] (30) at (3.5, 6) {64 Units};
        \node [style=texto] (31) at (7, 6.75) {Static Dense Layer};
        \node [style=texto] (32) at (7, 6) {128 Units};
        \node [style=texto] (33) at (0, -1.25) {LSTM Input Layer};
        \node [style=texto] (34) at (0, -2) {24 Units};
        \node [style=texto] (35) at (7, -1.25) {LSTM Layer};
        \node [style=texto] (36) at (7, -2) {128 Units};
        \node [style=texto] (37) at (11.5, 2.75) {Concatenate Layer};
        \node [style=texto] (38) at (11.5, 2) {256 Units};
        \node [style=texto] (39) at (15.5, 2.75) {Static Dense Layer};
        \node [style=texto] (40) at (15.5, 2) {48 Units};
        \node [style=texto] (41) at (19.5, 2.75) {Static Dense Layer};
        \node [style=texto] (42) at (19.5, 2) {24 Units};
        \node [style=texto] (43) at (23.25, 2.75) {Output Layer};
        \node [style=texto] (44) at (23.25, 2) {12 Units};
        \draw [style=seta] (0) to (3);
        \draw [style=seta] (0) to (4);
        \draw [style=seta] (0) to (5);
        \draw [style=seta] (1) to (3);
        \draw [style=seta] (1) to (4);
        \draw [style=seta] (1) to (5);
        \draw [style=seta] (2) to (3);
        \draw [style=seta] (2) to (4);
        \draw [style=seta] (2) to (5);
        \draw [style=seta] (3) to (6);
        \draw [style=seta] (3) to (7);
        \draw [style=seta] (3) to (8);
        \draw [style=seta] (4) to (6);
        \draw [style=seta] (4) to (7);
        \draw [style=seta] (4) to (8);
        \draw [style=seta] (5) to (6);
        \draw [style=seta] (5) to (7);
        \draw [style=seta] (5) to (8);
        \draw [style=seta] (9) to (12);
        \draw [style=seta] (9) to (13);
        \draw [style=seta] (9) to (14);
        \draw [style=seta] (10) to (12);
        \draw [style=seta] (10) to (13);
        \draw [style=seta] (10) to (14);
        \draw [style=seta] (11) to (12);
        \draw [style=seta] (11) to (13);
        \draw [style=seta] (11) to (14);
        \draw [style=seta] (6) to (15);
        \draw [style=seta] (6) to (16);
        \draw [style=seta] (6) to (17);
        \draw [style=seta] (7) to (15);
        \draw [style=seta] (7) to (16);
        \draw [style=seta] (7) to (17);
        \draw [style=seta] (8) to (15);
        \draw [style=seta] (8) to (16);
        \draw [style=seta] (8) to (17);
        \draw [style=seta] (12) to (15);
        \draw [style=seta] (12) to (16);
        \draw [style=seta] (12) to (17);
        \draw [style=seta] (13) to (15);
        \draw [style=seta] (13) to (16);
        \draw [style=seta] (13) to (17);
        \draw [style=seta] (14) to (15);
        \draw [style=seta] (14) to (16);
        \draw [style=seta] (14) to (17);
        \draw [style=seta] (15) to (18);
        \draw [style=seta] (15) to (19);
        \draw [style=seta] (15) to (20);
        \draw [style=seta] (16) to (18);
        \draw [style=seta] (16) to (19);
        \draw [style=seta] (16) to (20);
        \draw [style=seta] (17) to (18);
        \draw [style=seta] (17) to (19);
        \draw [style=seta] (17) to (20);
        \draw [style=seta] (18) to (21);
        \draw [style=seta] (18) to (22);
        \draw [style=seta] (18) to (23);
        \draw [style=seta] (19) to (21);
        \draw [style=seta] (19) to (22);
        \draw [style=seta] (19) to (23);
        \draw [style=seta] (20) to (21);
        \draw [style=seta] (20) to (22);
        \draw [style=seta] (20) to (23);
        \draw [style=seta] (21) to (24);
        \draw [style=seta] (21) to (25);
        \draw [style=seta] (21) to (26);
        \draw [style=seta] (22) to (24);
        \draw [style=seta] (22) to (25);
        \draw [style=seta] (22) to (26);
        \draw [style=seta] (23) to (24);
        \draw [style=seta] (23) to (25);
        \draw [style=seta] (23) to (26);
        \draw [style=seta, in=135, out=45, loop] (12) to ();
        \draw [style=seta, in=135, out=45, loop] (13) to ();
        \draw [style=seta, in=135, out=45, loop] (14) to ();
    \end{tikzpicture}
    \caption{Parallel LSTM-MLP network}
    \label{fig:enter-label}
\end{figure}

\end{document}

Saída:

insira a descrição da imagem aqui

Muitos problemas aqui:

1 - Se eu tentar dimensionar a imagem inteira usando scale = 0.5, ainda consigoOverfull \hbox (34.27876pt too wide) in paragraph at lines 140--141

2 - Texto sobreposto acima de cada nó;

3 - Nos nós azuis, as setas que iniciam e terminam nesses nós também se sobrepõem aos nós acima deles (ou no caso do primeiro nó azul, se sobrepõem ao LSTM Layer 128 unitstexto).

Alguma idéia de como corrigir esses problemas?

Responder1

Eu não dimensionaria sua imagem porque a imagem resultante terá tamanho de fonte inconsistente e formatação pura. Um resultado muito melhor é obtido redesenhando a imagem onde eu:

  • reduzir distâncias horizontais entre nós
  • nos nós para descrição da camada use \footnotesizefontes e texto espalhado em várias linhas
  • renomeie os nós para que esse nome consista <layer name><number of node>. Com esta alteração, as setas entre os nós podem ser desenhadas em loop duplo:
\documentclass[numbers, preprint, review,
               12pt, sort&compress]{elsarticle}
%--------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%
\usepackage{lipsum}                              % for dummy text
%---------------------------------------------------------------%
\usepackage{tikz}
\usetikzlibrary{arrows.meta}

\begin{document}
    \begin{figure}
    \centering
\begin{tikzpicture}[%scale=0.7, transform shape,
  C/.style = {circle, draw, inner sep=0pt, minimum size=4mm},
Cin/.style = {C, fill=gray},   
 Cr/.style = {C, fill=red},    
 Cg/.style = {C, fill=green}, 
 Cy/.style = {C, fill=yellow}, 
 Cb/.style = {C, fill=blue},   
 Tx/.style = {font=\footnotesize\linespread{0.84}\selectfont, inner sep=0pt,
              align=center, above},
every edge/.style= {draw=gray, -Straight Barb, semithick}
                        ]
% nodes
\node [Cin] (I1) at (0, 5) {};
\node [Cin] (I2) at (0, 3.5) {};
\node [Cin] (I3) at (0, 2) {};

\node [Cr]  (A1) at (2, 5) {};
\node [Cr]  (A2) at (2, 3.5) {};
\node [Cr]  (A3) at (2, 2) {};
\node [Cr]  (B1) at (4, 5) {};
\node [Cr]  (B2) at (4, 3.5) {};
\node [Cr]  (B3) at (4, 2) {};

\node [Cg]  (C1) at (6, 1) {};
\node [Cg]  (C2) at (6, -0.5) {};
\node [Cg]  (C3) at (6, -2) {};

\node [Cin] (D1) at (8, 1) {};
\node [Cin] (D2) at (8, -0.5) {};
\node [Cin] (D3) at (8, -2) {};
\node [Cin] (E1) at (10, 1) {};
\node [Cin] (E2) at (10, -0.5) {};
\node [Cin] (E3) at (10, -2) {};

\node [Cy]  (O1) at (12, 1) {};
\node [Cy]  (O2) at (12, -0.5) {};
\node [Cy]  (O3) at (12, -2) {};


\node [Cr]  (J1) at (0, -3) {};
\node [Cr]  (J2) at (0, -4.5) {};
\node [Cr]  (J3) at (0, -6) {};

\node [Cb]  (G1) at (4, -3) {};
\node [Cb]  (G2) at (4, -4.5) {};
\node [Cb]  (G3) at (4, -6) {};

\node [Tx]  at (0, 5.5)   {Static\\ Input\\ Layer\\ 4 Units};
\node [Tx]  at (2, 5.5)   {Static\\ Dense\\ Layer\\ 64 Units};
\node [Tx]  at (4, 5.5)   {Static\\ Dense\\ Layer\\ 128 Units};
\node [Tx]  at (0, -2)   {LSTM\\   Input\\ Layer\\ 24 Units};
\node [Tx]  at (4, -2)   {LSTM\\ Layer\\ 128 Units};
\node [Tx]  at (6, 2)    {Concatenate\\ Layer\\ 256\\ Units};
\node [Tx]  at (8, 2)    {Static\\ Dense\\ Layer\\ 48 Units};
\node [Tx]  at (10, 2)    {Static\\ Dense\\ Layer\\ 24 Units};
\node [Tx]  at (12, 2)    {Output\\ Layer\\ 12 Units};
% arrows
\foreach \m in {1,2,3}
    \foreach \n in {1,2,3}
    {
        \draw   (I\m) edge (A\n) 
                (A\m) edge (B\n) 
                (B\m) edge (C\n) 
                (C\m) edge (D\n) 
                (D\m) edge (E\n) 
                (E\m) edge (O\n) % output
    %
                (J\m) edge (G\n) 
                (G\m) edge (C\n) 
    %
                (G\n) edge [in=135, out=45, loop] ();
    }
    \end{tikzpicture}
\caption{Parallel LSTM-MLP network}
\label{fig:enter-label}
    \end{figure}
\end{document}

insira a descrição da imagem aqui

Se a imagem for muito alta, reduza a distância vertical entre os nós (por exemplo, de 1,5 para 1, ou o que você preferir que sejam)

Responder2

Resposta baseada em Zarko. Você pode ajustar o espaçamento com dxe dy.

\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
   
\begin{figure}
\begin{tikzpicture}[
  C/.style = {circle, draw, inner sep=0pt, minimum size=4mm},
 C1/.style = {C, fill=red},  C2/.style = {C, fill=blue},    
 C3/.style = {C, fill=green},C4/.style = {C, fill=gray}, 
 C5/.style = {C, fill=gray}, C6/.style = {C, fill=yellow},   
 C7/.style = {C, fill=gray}, C8/.style = {C, fill=red},   
 C9/.style = {C, fill=red},  
 Tx/.style = {font=\footnotesize\linespread{0.84}\selectfont, inner sep=0pt,
              align=center, above},
every edge/.style= {draw=gray, -Straight Barb, semithick} ]

\def\dx{2}
\def\dy{1.5}
\foreach \i/\j/\n/\lab [count=\ST] in {
      0/0/J/{LSTM\\ Input\\ Layer\\ 24 Units},
      2*\dx/0/G/{LSTM\\ Layer\\ 128 Units},
      3*\dx/4/C/{Concatenate\\ Layer\\ 256\\ Units},
      4*\dx/4/D/{Static\\ Dense\\ Layer\\ 48 Units},
      5*\dx/4/E/{Static\\ Dense\\ Layer\\ 24 Units},
      6*\dx/4/O/{Output\\ Layer\\ 12 Units},
      0/8/I/{Static\\ Input\\ Layer\\ 4 Units},
      \dx/8/A/{Static\\ Dense\\ Layer\\ 64 Units},
      2*\dx/8/B/{Static\\ Dense\\ Layer\\ 128 Units}}
{\foreach \k in {1,2,3} {\node[C\ST](\n\k) at (\i,\j+\dy*\k) {};}
\node[anchor=south,above=2em,text width=2cm] at (\n3){\lab};
}

\foreach \m in {1,2,3}
    \foreach \n in {1,2,3}
    {   \draw   (I\m) edge (A\n)
                (A\m) edge (B\n)
                (B\m) edge (C\n)
                (C\m) edge (D\n)
                (D\m) edge (E\n)
                (E\m) edge (O\n) 
                (J\m) edge (G\n)
                (G\m) edge (C\n)
                (G\n) edge [in=135, out=45, loop] ();
    }
    \end{tikzpicture}
\caption{Parallel LSTM-MLP network}
\label{fig:enter-label}
    \end{figure}
\end{document}

insira a descrição da imagem aqui

informação relacionada