disegnare grafo

  • Creatore
    Topic
  • #100102
    Up
    0
    Down
    ::


    Ciao,

    sto usando questo codice, piu’ o meno copia-incollato dal web, per disegnare un grafo data la matrice di adianceza.

    Mi piacerebbe aggiungere una funzione, ma non so come scriverla. In pratica vorrei poter aggiungere qualche arco entrante “dall’esterno” (quindi non connesso fra due nodi) che abbia lo stesso stile degli altri archi (compresa l’etichetta numerata a meta’).

    Per capire meglio cosa voglio vedere l’ultima maldestra riga del codice 🙂

    Qualcuno potrebbe aiutarmi?

    grazie, ciao!

    `
    \documentclass[tikz]{standalone}
    \usetikzlibrary{arrows}
    \newcommand{\graphfromadj}[3][arc/.try]{
    \foreach [count=\r] \row in {#3}{
    \foreach [count=\c] \cell in \row{
    \ifnum\cell>0%
    \draw[arc/.try=\cell, #1,->] (#2\r) — (#2\c);
    \fi
    }
    }
    }

    \newcommand{\weigthgraphfromadj}[3][draw,->]{
    \foreach [count=\r] \row in {#3}{
    \foreach [count=\c] \cell in \row{
    \if0\cell%
    \else
    \draw[arc/.try=\cell, #1,->] (#2\r) — node[arc label/.try=\cell]{\cell} (#2\c);
    \fi
    }
    }
    }

    \begin{document}
    \begin{tikzpicture}[scale=5,
    vertex/.style={draw,circle},
    arc/.style={%
    draw=blue,%!#10,%
    ultra thick,>=stealth', ->},
    arc label/.style={fill=white, font=\large, inner sep=1pt}
    ]
    \foreach [count=\i] \coord in {(1,3),(3,3),(5,3),(1,1),(3,1),(5,1)}{
    \node[vertex] (p\i) at \coord {\i};
    }

    \weigthgraphfromadj[bend left=10]{p}%
    {{0,2,0,0,0,0},{0,0,3,0,6,0},{0,0,0,0,0,0},{5,0,0,0,0,0},{0,0,0,6,0,0},{0,0,7,0,10,0}}

    \draw (-0.5,4)–(1,3); % ???????
    \end{tikzpicture}
    \end{document}
    `

Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #100103
      Up
      0
      Down
      ::

      DirkPitt” post=99791Ciao,

      sto usando questo codice, piu’ o meno copia-incollato dal web, per disegnare un grafo data la matrice di adianceza.

      Mi piacerebbe aggiungere una funzione, ma non so come scriverla. In pratica vorrei poter aggiungere qualche arco entrante “dall’esterno” (quindi non connesso fra due nodi) che abbia lo stesso stile degli altri archi (compresa l’etichetta numerata a meta’).

      Per capire meglio cosa voglio vedere l’ultima maldestra riga del codice 🙂

      Qualcuno potrebbe aiutarmi?

      grazie, ciao!

      `
      \documentclass[tikz]{standalone}
      \usetikzlibrary{arrows}
      \newcommand{\graphfromadj}[3][arc/.try]{
      \foreach [count=\r] \row in {#3}{
      \foreach [count=\c] \cell in \row{
      \ifnum\cell>0%
      \draw[arc/.try=\cell, #1,->] (#2\r) — (#2\c);
      \fi
      }
      }
      }

      \newcommand{\weigthgraphfromadj}[3][draw,->]{
      \foreach [count=\r] \row in {#3}{
      \foreach [count=\c] \cell in \row{
      \if0\cell%
      \else
      \draw[arc/.try=\cell, #1,->] (#2\r) — node[arc label/.try=\cell]{\cell} (#2\c);
      \fi
      }
      }
      }

      \begin{document}
      \begin{tikzpicture}[scale=5,
      vertex/.style={draw,circle},
      arc/.style={%
      draw=blue,%!#10,%
      ultra thick,>=stealth', ->},
      arc label/.style={fill=white, font=\large, inner sep=1pt}
      ]
      \foreach [count=\i] \coord in {(1,3),(3,3),(5,3),(1,1),(3,1),(5,1)}{
      \node[vertex] (p\i) at \coord {\i};
      }

      \weigthgraphfromadj[bend left=10]{p}%
      {{0,2,0,0,0,0},{0,0,3,0,6,0},{0,0,0,0,0,0},{5,0,0,0,0,0},{0,0,0,6,0,0},{0,0,7,0,10,0}}

      \draw (-0.5,4)–(1,3); % ???????
      \end{tikzpicture}
      \end{document}
      `

      Non ho capito se l’arco deve essere un arco visto che tu hai disegnato un segmento con l’ultima riga e non ho neppure capito se cerchi una macro. In caso contrario, prova:`\draw[arc] (-0.5,4)–(p1)node[arc label,pos=0.5]{1};`

      Ciao
      Claudio

    • #100104
      Up
      0
      Down
      ::


      …. potere della sfera di cristallo…

      Grazie mille, ciao

      cfiandra” post=99792

      Ciao,

      sto usando questo codice, piu’ o meno copia-incollato dal web, per disegnare un grafo data la matrice di adianceza.

      Mi piacerebbe aggiungere una funzione, ma non so come scriverla. In pratica vorrei poter aggiungere qualche arco entrante “dall’esterno” (quindi non connesso fra due nodi) che abbia lo stesso stile degli altri archi (compresa l’etichetta numerata a meta’).

      Per capire meglio cosa voglio vedere l’ultima maldestra riga del codice 🙂

      Qualcuno potrebbe aiutarmi?

      grazie, ciao!

      `
      \documentclass[tikz]{standalone}
      \usetikzlibrary{arrows}
      \newcommand{\graphfromadj}[3][arc/.try]{
      \foreach [count=\r] \row in {#3}{
      \foreach [count=\c] \cell in \row{
      \ifnum\cell>0%
      \draw[arc/.try=\cell, #1,->] (#2\r) — (#2\c);
      \fi
      }
      }
      }

      \newcommand{\weigthgraphfromadj}[3][draw,->]{
      \foreach [count=\r] \row in {#3}{
      \foreach [count=\c] \cell in \row{
      \if0\cell%
      \else
      \draw[arc/.try=\cell, #1,->] (#2\r) — node[arc label/.try=\cell]{\cell} (#2\c);
      \fi
      }
      }
      }

      \begin{document}
      \begin{tikzpicture}[scale=5,
      vertex/.style={draw,circle},
      arc/.style={%
      draw=blue,%!#10,%
      ultra thick,>=stealth', ->},
      arc label/.style={fill=white, font=\large, inner sep=1pt}
      ]
      \foreach [count=\i] \coord in {(1,3),(3,3),(5,3),(1,1),(3,1),(5,1)}{
      \node[vertex] (p\i) at \coord {\i};
      }

      \weigthgraphfromadj[bend left=10]{p}%
      {{0,2,0,0,0,0},{0,0,3,0,6,0},{0,0,0,0,0,0},{5,0,0,0,0,0},{0,0,0,6,0,0},{0,0,7,0,10,0}}

      \draw (-0.5,4)–(1,3); % ???????
      \end{tikzpicture}
      \end{document}
      `

      Non ho capito se l’arco deve essere un arco visto che tu hai disegnato un segmento con l’ultima riga e non ho neppure capito se cerchi una macro. In caso contrario, prova:`\draw[arc] (-0.5,4)–(p1)node[arc label,pos=0.5]{1};`

      Ciao
      Claudio

    • #100105
      Up
      0
      Down
      ::


      Ciao,

      riprendo il post per un ulteriore domanda.

      Come si puo’ modificare questa riga

      `\node[vertex] (p\i) at \coord {\i};`

      per avere come etichetta del nodo una lettera anziche’ un intero, facendo in modo che quando i=1 venga stampato A, i=2 B, etc. ?

      Grazie, ciao!

      DirkPitt” post=99794…. potere della sfera di cristallo…

      Grazie mille, ciao

      [quote=”DirkPitt” post=99791]Ciao,

      sto usando questo codice, piu’ o meno copia-incollato dal web, per disegnare un grafo data la matrice di adianceza.

      Mi piacerebbe aggiungere una funzione, ma non so come scriverla. In pratica vorrei poter aggiungere qualche arco entrante “dall’esterno” (quindi non connesso fra due nodi) che abbia lo stesso stile degli altri archi (compresa l’etichetta numerata a meta’).

      Per capire meglio cosa voglio vedere l’ultima maldestra riga del codice 🙂

      Qualcuno potrebbe aiutarmi?

      grazie, ciao!

      `
      \documentclass[tikz]{standalone}
      \usetikzlibrary{arrows}
      \newcommand{\graphfromadj}[3][arc/.try]{
      \foreach [count=\r] \row in {#3}{
      \foreach [count=\c] \cell in \row{
      \ifnum\cell>0%
      \draw[arc/.try=\cell, #1,->] (#2\r) — (#2\c);
      \fi
      }
      }
      }

      \newcommand{\weigthgraphfromadj}[3][draw,->]{
      \foreach [count=\r] \row in {#3}{
      \foreach [count=\c] \cell in \row{
      \if0\cell%
      \else
      \draw[arc/.try=\cell, #1,->] (#2\r) — node[arc label/.try=\cell]{\cell} (#2\c);
      \fi
      }
      }
      }

      \begin{document}
      \begin{tikzpicture}[scale=5,
      vertex/.style={draw,circle},
      arc/.style={%
      draw=blue,%!#10,%
      ultra thick,>=stealth', ->},
      arc label/.style={fill=white, font=\large, inner sep=1pt}
      ]
      \foreach [count=\i] \coord in {(1,3),(3,3),(5,3),(1,1),(3,1),(5,1)}{

      }

      \weigthgraphfromadj[bend left=10]{p}%
      {{0,2,0,0,0,0},{0,0,3,0,6,0},{0,0,0,0,0,0},{5,0,0,0,0,0},{0,0,0,6,0,0},{0,0,7,0,10,0}}

      \draw (-0.5,4)–(1,3); % ???????
      \end{tikzpicture}
      \end{document}
      `

      Non ho capito se l’arco deve essere un arco visto che tu hai disegnato un segmento con l’ultima riga e non ho neppure capito se cerchi una macro. In caso contrario, prova:`\draw[arc] (-0.5,4)–(p1)node[arc label,pos=0.5]{1};`

      Ciao
      Claudio

      [/quote]

    • #100106
      Up
      0
      Down
      ::

      DirkPitt” post=100217Ciao,

      riprendo il post per un ulteriore domanda.

      Come si puo’ modificare questa riga

      `\node[vertex] (p\i) at \coord {\i};`

      per avere come etichetta del nodo una lettera anziche’ un intero, facendo in modo che quando i=1 venga stampato A, i=2 B, etc. ?

      Grazie, ciao!

      Beh, con i contatori è abbastanza semplice: `\documentclass[tikz]{standalone}
      \usetikzlibrary{arrows}
      \newcommand{\graphfromadj}[3][arc/.try]{
      \foreach [count=\r] \row in {#3}{
      \foreach [count=\c] \cell in \row{
      \ifnum\cell>0%
      \draw[arc/.try=\cell, #1,->] (#2\r) — (#2\c);
      \fi
      }
      }
      }

      \newcommand{\weigthgraphfromadj}[3][draw,->]{
      \foreach [count=\r] \row in {#3}{
      \foreach [count=\c] \cell in \row{
      \if0\cell%
      \else
      \draw[arc/.try=\cell, #1,->] (#2\r) — node[arc label/.try=\cell]{\cell} (#2\c);
      \fi
      }
      }
      }

      \newcounter{myc}% nuovo contatore

      \begin{document}
      \begin{tikzpicture}[scale=5,
      vertex/.style={draw,circle},
      arc/.style={%
      draw=blue,%!#10,%
      ultra thick,>=stealth', ->},
      arc label/.style={fill=white, font=\large, inner sep=1pt}
      ]
      \foreach [count=\i] \coord in {(1,3),(3,3),(5,3),(1,1),(3,1),(5,1)}{
      \setcounter{myc}{\i}% il contatore assume il valore \i
      \node[vertex] (p\i) at \coord {\Alph{myc}};% viene stampato il suo corrispondente alfabetico
      }

      \weigthgraphfromadj[bend left=10]{p}%
      {{0,2,0,0,0,0},{0,0,3,0,6,0},{0,0,0,0,0,0},{5,0,0,0,0,0},{0,0,0,6,0,0},{0,0,7,0,10,0}}

      \draw[arc] (-0.5,4)–(p1)node[arc label,pos=0.5]{1};
      \end{tikzpicture}
      \end{document}`Ciao
      Claudio

Visualizzazione 3 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top