Ich zeichne einen Digraphen, um eine Matrix darzustellen.
\begin{figure}
\begin{tikzpicture}[roundnode/.style={circle, draw=black!60, fill=black!5, very thick, minimum size=7mm}]
%Nodes
\node[roundnode] (midcircle) {2};
\node[roundnode] (uppercircle) [above=of midcircle] {1};
\node[roundnode] (rightcircle) [right=of midcircle] {4};
\node[roundnode] (lowercircle) [below=of midcircle] {3};
%Edges out of 1
\draw[->] (uppercircle.east) -- (rightcircle.north);
\draw[->] (uppercircle.west) .. controls+(left:40mm) .. (lowercircle.west);
\draw[->] (uppercircle.west) .. controls +(up:20mm) and +(right:7mm) .. (uppercircle.east);
%2 Edges out of 2
\draw[->] (midcircle.east) -- (rightcircle.west);
\draw[->] (midcircle.north) .. controls +(up:5mm) and +(right:7mm) .. (midcircle.east);
\draw[->] (midcircle.south) -- (lowercircle.north);
\draw[->] (midcircle.north) -- (uppercircle.south);
%Edges out of 3
\draw[->] (lowercircle.west) .. controls+(left:50mm) and +(up:10mm) .. (uppercircle.west);
\draw[->] (lowercircle.east) -- (rightcircle.south);
\draw[->] (lowercircle.south) .. controls +(right:7mm) .. (lowercircle.east);
%Edges out of 4
\draw[->] (rightcircle.south) .. controls +(down:7mm) and +(right:7mm) .. (midcircle.east);
\end{tikzpicture}
\end{figure}
Dadurch entsteht
- Ich würde gerne wissen, wie man Kanten einfach mit + oder - beschriftet
- Ich möchte schönere Kanten erstellen, die sich nicht überschneiden und symmetrischer sind. Ich bin nicht sicher, ob die Verwendung
controls
des Befehls der beste Ansatz ist. Es könnte auch besser funktionieren, wenn die Kanten nicht aufnorth
,south
,east
, oder ausgehen und eintretenwest
. Irgendwelche Vorschläge für bessere Methoden?
Antwort1
Hier ist der mit der Bibliothek gezeichnete Automat automata
. Ich habe alle Kanten mit Buchstaben beschriftet, um sie im Code leichter identifizieren zu können, aber Sie können natürlich auch etwas wie node{\texttt{+}}
oder verwenden node{$+$}
.
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{automata,positioning}
\begin{document}
\begin{tikzpicture}%
[>=stealth,
shorten >=1pt,
node distance=2cm,
on grid,
auto,
every state/.style={draw=black!60, fill=black!5, very thick}
]
\node[state] (mid) {2};
\node[state] (upper) [above=of mid] {1};
\node[state] (right) [right=of mid] {4};
\node[state] (lower) [below=of mid] {3};
\path[->]
% FROM BEND/LOOP POSITION OF LABEL LABEL TO
(upper) edge[bend left] node {a} (right)
edge[bend right=80] node[swap,very near start]{b} (lower)
edge[loop above] node {c} (upper)
(mid) edge[bend left=10] node {d} (right)
edge[loop left] node {e} (mid)
edge node {f} (lower)
edge node {g} (upper)
(lower) edge[bend left=70] node[swap,very near start]{h} (upper)
edge[bend right] node[swap] {i} (right)
edge[loop below] node {j} (lower)
(right) edge[bend left=10] node {k} (mid)
;
\end{tikzpicture}
\end{document}
Antwort2
Ich weiß nicht, ob ich Ihre Frage vollständig verstanden habe, aber hier ist eine Lösung. Sicherlich nicht die beste.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{automata,arrows,calc,positioning}
\begin{document}
\begin{figure}
\begin{tikzpicture}[roundnode/.style={circle, draw=black!60, fill=black!5, very thick, minimum size=7mm}]
%Nodes
\node[roundnode] (midcircle) {2};
\node[roundnode] (uppercircle) [above=of midcircle] {1};
\node[roundnode] (rightcircle) [right=of midcircle] {4};
\node[roundnode] (lowercircle) [below=of midcircle] {3};
%Edges out of 1
\draw[->] (uppercircle.east) to[bend left=20] node[above right]{-}(rightcircle.north);
\draw[->] (uppercircle.-135) to[bend right=40] node[right]{-}(lowercircle.135);
\draw[->] (uppercircle.135) to[out=135,in=180] ($(uppercircle) +(0,3em)$)node[above]{+} to[out=0, in =45] (uppercircle.45);
%2 Edges out of 2
\draw[->] (midcircle.east) --node[above]{+} (rightcircle.west);
\draw[->] (midcircle.80) to[out=80,in=135] ($(midcircle) +(2em,2em)$)node[right]{+} to[out=-45, in =10] (midcircle.10);
\draw[->] (midcircle.south) -- (lowercircle.north);
\draw[->] (midcircle.north) -- (uppercircle.south);
%Edges out of 3
\draw[->] (lowercircle.150) to[bend left=80]node[left]{+}(uppercircle.-150);
\draw[->] (lowercircle.east) to[bend right=20]node[below right]{-}(rightcircle.south);
\draw[->] (lowercircle.-135) to[out=-135,in=180] ($(lowercircle) +(0,-3em)$)node[below]{+} to[out=0, in =-45](lowercircle.-45);
%Edges out of 4
\draw[->] (rightcircle.-135) to[bend left=20] node[below]{-} (midcircle.-45);
\end{tikzpicture}
\end{figure}
\end{document}