Zeichnen eines multi-edge Graphen

Tabellen und Grafiken erstellen und anordnen


hask
Forum-Anfänger
Forum-Anfänger
Beiträge: 24
Registriert: Do 11. Apr 2013, 22:31

Zeichnen eines multi-edge Graphen

Beitrag von hask »

Hallo,

ich versuche gerade einen Graphen mithilfe von Latex zu zeichnen.
So in etwa (natürlich schöner ;), den Pixel bitte ignorieren) soll er aussehen:
Bild

Das ist das, was ich bisher habe:

Bild
Was ich bisher nicht auf die Reihe bekommen habe (habe dafür keine richtigen Beispiele für gefunden):
- 2 (oder mehr wenn es geht) Kanten (versetzt) zwischen 2 Knoten zeichnen, bisher überlagern sie sich bei meinen Versuchen
- Kanten so zeichnen dass sie durch Knoten durchgehen und dort einen Knick machen, wie z.B. bei der Kante von oben links, welche durch den Knoten in der Mitte führt, und dann zum Knoten unten rechts geht
- der Knoten unten rechts soll etwas näher an die obere Reihe rücken, bisher ist der Abstand zwischen allen Knoten 2cm

Hier der Code dazu:
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}

\begin{tikzpicture}[
	>=stealth',node distance=2cm,
	node/.style={circle,minimum size=5mm,draw}]
	\node[node] (1) [] {};
	\node[node] (2) [right of=1] {};
	\node[node] (3) [right of=2] {};
	\node[node] (4) [below of=3] {};
	
	\path []
	(1) edge node [left] {} (2)
	(2) edge node [left] {} (3)
	(2) edge node [left] {} (4);
\end{tikzpicture}

\end{document}

Um Hilfe wäre ich sehr dankbar,
Gruß hask

Hagbard Celine
Forum-Century
Forum-Century
Beiträge: 152
Registriert: Mi 23. Feb 2011, 22:13
Wohnort: Halle (Saale)

calc-library

Beitrag von Hagbard Celine »

Hallo hask,

du kannst deine Linien einfach nicht im Zentrum der Nodes, sondern leicht versetzt verlaufen lassen.
Zum Beispiel so:
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows,calc}

\newlength{\versatz}
\setlength{\versatz}{2pt}

\begin{document}

\begin{tikzpicture}[
	>=stealth',node distance=2cm,
	node/.style={circle,minimum size=5mm,draw}]
	\node[node] (1) [] {};
	\node[node] (2) [right of=1] {};
	\node[node] (3) [right of=2] {};
	\node[node] (4) [below of=3] {};

	\draw ($(1)+(0,\versatz)$) -- ($(3)+(0,\versatz)$);
	\draw ($(1)+(0,-\versatz)$) -- ($(2)+(0,-\versatz)$) -- ($(4)+(0,-\versatz)$);
\end{tikzpicture}

\end{document}
Ich habe einfach zu den Koordinaten der Nodes noch die Punkte (0,\versatz) bzw. (0,-\versatz) addiert. Dafür braucht man das Konstrukt mit den Dollarzeichen und die tikzlibrary calc. Mit der Länge \versatz kann man die Linien nun bequem verschieben.

Viele Grüße,
Jonas

hask
Forum-Anfänger
Forum-Anfänger
Beiträge: 24
Registriert: Do 11. Apr 2013, 22:31

Beitrag von hask »

Wow, vielen Dank, du hast mir schonmal sehr geholfen!

2 Fragen hätte ich noch:
- Wie kann ich die Kanten (ober-/unterhalb) beschriften?
Bei Knoten geht das ja beispielsweise mit
\node[node] (2) [right of=1, label=above:Text] {};
und wenn man Kanten mit dem "path"-Konstrukt zeichnet mit beispielsweise
\path[]
(1) edge node [left] {Text}
aber wie funktioniert es bei Kanten mit dem "draw"-Konstrukt?
- Ich würde gerne, dass die Knoten in der oberen Reihe jeweils einen Abstand von 2cm haben (wie bisher), der untere aber einen Abstand von 1cm zu dem darüberliegendem hat. Ist das möglich?

Viele Grüße,
hask

Hagbard Celine
Forum-Century
Forum-Century
Beiträge: 152
Registriert: Mi 23. Feb 2011, 22:13
Wohnort: Halle (Saale)

Beitrag von Hagbard Celine »

Du kannst einfach nodes in deinem Pfad platzieren. Für die Positionierung der nodes guck' dir am besten Kapitel 16.8 im pgfmanual (Dokumentation von TikZ) an.
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows,calc,positioning}

\newlength{\versatz}
\setlength{\versatz}{2pt}

\begin{document}

\begin{tikzpicture}[
	>=stealth',node distance=2cm,
	node/.style={circle,minimum size=5mm,draw}]
	\node[node] (1) [] {};
	\node[node] (2) [right= of 1] {};
	\node[node] (3) [right= of 2] {};
	\node[node] (4) [below=1cm of 3] {};

	\draw ($(1)+(0,\versatz)$) -- ($(3)+(0,\versatz)$) node[above,midway] {obere Beschriftung};
	\draw ($(1)+(0,-\versatz)$) -- ($(2)+(0,-\versatz)$) node[below,midway] {untere Beschriftung} -- ($(4)+(0,-\versatz)$);
\end{tikzpicture}

\end{document}

hask
Forum-Anfänger
Forum-Anfänger
Beiträge: 24
Registriert: Do 11. Apr 2013, 22:31

Beitrag von hask »

Danke!

Antworten