
Я только сегодня начал работать с TikZ и столкнулся с проблемой: просто нет примеров фрагментов кода для набора направленных, взвешенных графиков. Может ли кто-нибудь предоставить один простой пример в ответе?
решение1
Я сделал tkz-graph
и tkz-berge
помог начинающим рисовать некоторые графики. tkz-berge
используется для специальных графиков (называемых графами в теории графов)
Можно использовать только tikz
для рисования графиков.
Версия с 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}
Со стрелками по краям
\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}
обновление: версия с tikz
иautomata
\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}
решение2
Поскольку мне нужно было что-то простое, вот урезанная версия с использованием tkz-graph
кода Алена Маттеса, которая обеспечивает разумные значения по умолчанию для работы с математикой/информатикой и демонстрирует некоторые общие параметры вершин, ребер и меток.
\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}
Полезные ресурсы:
- Циклы:Как создать граф tkz с ребрами, начинающимися и заканчивающимися в одной и той же вершине?
- Невидимые вершины:Невидимые вершины с tkz-графом
- Вершина без окружности:Как нарисовать граф в tikz, вершины которого представлены только именами меток?
- Ссылка на вершину, внутри которой находится набор математических данных, для создания ребра
- Тонкая настройка меток с помощью
labelstyle
(above
,sloped
,pos
, ...)Маркировка рёбер в взвешенном орграфе - Изменить угол изгиба и поменять положение узла на стрелке
Руководство tkz-graph составлено на французском языке, но содержит достаточно английских слов или родственных им слов, чтобы его можно было расшифровать.https://ctan.org/pkg/tkz-graph
tkz-graph также поставляется с полезными встроенными стилями графиков: