
Comecei a fazer coisas com o TikZ hoje e me deparei com um problema: simplesmente não há trechos de código de exemplo para composição de gráficos direcionados e ponderados. Alguém pode fornecer um exemplo simples em uma resposta?
Responder1
Fiz tkz-graph
e tkz-berge
para ajudar iniciantes a desenhar alguns gráficos. tkz-berge
é usado para gráficos especiais (denominados gráficos na teoria dos grafos)
Você pode usar apenas tikz
para desenhar gráficos.
Versão com gráfico tkz
\documentclass[]{article}
\usepackage[utf8]{inputenc}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{fullpage}
\usepackage[upright]{fourier}
\usepackage{tkz-graph}
\usetikzlibrary{arrows}
\thispagestyle{empty}
\begin{document}
\SetVertexNormal[Shape = circle,
FillColor = orange,
LineWidth = 2pt]
\SetUpEdge[lw = 1.5pt,
color = black,
labelcolor = white,
labeltext = red,
labelstyle = {sloped,draw,text=blue}]
\begin{center}
\begin{tikzpicture}
\Vertex[x=0 ,y=0]{K}
\Vertex[x=0 ,y=2]{F}
\Vertex[x=-1,y=4]{D}
\Vertex[x=3 ,y=7]{H}
\Vertex[x=8 ,y=5]{B}
\Vertex[x=9 ,y=2]{N}
\Vertex[x=5 ,y=0]{M}
\Vertex[x=3 ,y=1]{S}
\tikzset{EdgeStyle/.append style = {bend left}}
\Edge[label = $120$](K)(F)
\Edge[label = $650$](H)(S)
\Edge[label = $780$](H)(M)
\Edge[label = $490$](D)(B)
\Edge[label = $600$](D)(M)
\Edge[label = $580$](B)(M)
\Edge[label = $600$](H)(N)
\Edge[label = $490$](F)(H)
\tikzset{EdgeStyle/.append style = {bend right}}
\Edge[label = $630$](S)(B)
\Edge[label = $210$](S)(N)
\Edge[label = $230$](S)(M)
\end{tikzpicture}
\end{center}
\end{document}
Com setas nas bordas
\documentclass[11pt]{scrartcl}
\usepackage{tkz-graph}
\begin{document}
\begin{tikzpicture}
\SetUpEdge[lw = 1.5pt,
color = orange,
labelcolor = white]
\GraphInit[vstyle=Normal]
\SetGraphUnit{3}
\tikzset{VertexStyle/.append style={fill}}
\Vertex{P}
\NOEA(P){B} \SOEA(P){M} \NOEA(B){D}
\SOEA(B){C} \SOEA(C){L}
\tikzset{EdgeStyle/.style={->}}
\Edge[label=$3$](C)(B)
\Edge[label=$10$](D)(B)
\Edge[label=$10$](L)(M)
\Edge[label=$10$](B)(P)
\tikzset{EdgeStyle/.style={<->}}
\Edge[label=$4$](P)(M)
\Edge[label=$9$](C)(M)
\Edge[label=$4$](C)(L)
\Edge[label=$5$](C)(D)
\Edge[label=$10$](B)(M)
\tikzset{EdgeStyle/.style={<->,relative=false,in=0,out=60}}
\Edge[label=$11$](L)(D)
\end{tikzpicture}
\end{document}
atualização: Versão com tikz
eautomata
\documentclass[11pt]{scrartcl}
\PassOptionsToPackage{usenames,dvipsnames,svgnames}{xcolor}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,automata}
\begin{document}
\begin{tikzpicture}[>=stealth',shorten >=1pt,node distance=3cm,on grid,initial/.style ={}]
\node[state] (P) {$P$};
\node[state] (B) [above right =of P] {$B$};
\node[state] (M) [below right =of P] {$M$};
\node[state] (D) [above right =of B] {$D$};
\node[state] (C) [below right =of B] {$C$};
\node[state] (L) [below right =of C] {$L$};
\tikzset{mystyle/.style={->,double=orange}}
\tikzset{every node/.style={fill=white}}
\path (C) edge [mystyle] node {$3$} (B)
(D) edge [mystyle] node {$10$} (B)
(L) edge [mystyle] node {$10$} (M)
(B) edge [mystyle] node {$10$} (P);
\tikzset{mystyle/.style={<->,double=orange}}
\path (P) edge [mystyle] node {$4$} (M)
(C) edge [mystyle] node {$9$} (M)
(C) edge [mystyle] node {$4$} (D)
(B) edge [mystyle] node {$5$} (M);
\tikzset{mystyle/.style={<->,relative=false,in=0,out=60,double=orange}}
\path (L) edge [mystyle] node {$10$} (D);
\end{tikzpicture}
\end{document}
Responder2
Como eu só queria algo fácil, aqui está uma versão simplificada usando tkz-graph
o código de Alain Matthes que fornece padrões de papel matemático/CS de aparência razoável e demonstra algumas opções comuns de vértices, arestas e rótulos.
\documentclass{article}
\usepackage{tkz-graph}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\Vertex[x=0,y=0]{K} % standard vertex at (0,0) with Name k
\Vertex[x=0,y=2]{F}
\Vertex[x=-1,y=4]{D}
\Vertex[x=8,y=5]{B}
\Vertex[x=9,y=2,L=$n$]{N} % custom label
\Vertex[x=5,y=0,LabelOut,Lpos=-90,Ldist=.2cm]{M} % custom label position
\Vertex[x=3,y=3.5,NoLabel]{S} % unlabeled
\tikzstyle{LabelStyle}=[sloped] % rotate labels to match edges
\Edge[label=$120$,labelstyle={pos=0.3,above}](K)(F) % custom label position
\Edge[label=$490$](D)(B)
\Edge[label=$580$](B)(M)
\Loop[dir=NO,dist=2cm,label=b,labelstyle={auto}](B) % loop/self-edge
\tikzstyle{EdgeStyle}=[pre, bend right] % set curved arrow style
\Edge[label=$210$](S)(N)
\end{tikzpicture}
\end{figure}
\end{document}
Recursos úteis:
- Rotações:Como você faz um gráfico tkz com arestas começando e terminando no mesmo vértice?
- Vértices invisíveis:Vértices invisíveis com gráfico tkz
- Vértice sem círculo:Como faço para desenhar um gráfico no tikz onde os vértices são representados apenas pelos nomes dos rótulos?
- Referenciando um vértice que possui composição matemática dentro dele para criar uma borda
- Ajustando rótulos com
labelstyle
(above
,sloped
,pos
, ...)Rotulando arestas em um dígrafo ponderado - Altere o ângulo de curvatura e troque a posição do nó na seta
O manual do tkz-graph está em francês, mas contém palavras ou cognatos em inglês suficientes para ser decifrável.https://ctan.org/pkg/tkz-graph
tkz-graph também vem com estilos de gráfico integrados úteis: