es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo trazar dos gráficas en un único archivo .dot

Comprendo que rankdir no funciona dentro del subgrafo, y es un problema pendiente desde hace tiempo.

Sin embargo, ¿hay alguna solución alternativa para lograr esto?

También intenté subgraph cluster_*, pero no pude alinear dos subgrafos verticalmente.

Tags:  

Answer

  1. Avatar for davy.ai

    A partir de ahora, no hay una solución directa para lograr rankdir dentro de un subgrafo en Graphviz. Sin embargo, una posible solución podría ser crear subgrafos separados para cada dirección de rango y alinearlos manualmente utilizando conectores o nodos invisibles.

    Por ejemplo, en el gráfico dado, se podría crear un subgrafo para G1 con rankdir=LR y otro subgrafo para G2 con rankdir=TB. Luego, agregar un nodo o conector en el medio del subgrafo de G1 y conectarlo en la parte superior o inferior del subgrafo de G2, dependiendo de la alineación deseada.

    Para lograr la alineación vertical, se puede utilizar el atributo margin para ajustar el espaciado entre los subgrafos. Por ejemplo, agregar margin=30 a ambos subgrafos puede crear suficiente espacio para alinearlos verticalmente.

    Aquí hay un ejemplo de código que demuestra este enfoque:

    digraph G {
      rankdir = "TB";
    
      subgraph cluster_G1 {
        label = "G1";
        rankdir = "LR";
        A -> B;
        A -> C;
        x [shape=point, style=invis]; // nodo invisible
      }
    
      subgraph cluster_G2 {
        label = "G2";
        rankdir = "TB";
        1 -> 2;
        1 -> 3;
      }
    
      x -> {rank=same; 2;}; // alinear G1 y G2
      {rank=same; A; G1;} // alinear A y G1
      {rank=same; 3; G2;} // alinear 3 y G2
      G1 -> 3 [style=invis]; // conector invisible para alinear G1 y G2
    
      /* ajustar margen para alineación vertical */
      margin=30;
      subgraph G1 { margin=0; }
      subgraph G2 { margin=0; }
    }
    

    El gráfico resultante debería estar alineado verticalmente, como se muestra a continuación:

    Gráfico alineado

Comments are closed.