Netzwerk mit Tikz zeichnen

Tabellen und Grafiken erstellen und anordnen


Trauminsel
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 69
Registriert: Mi 13. Apr 2016, 10:21

Netzwerk mit Tikz zeichnen

Beitrag von Trauminsel »

Guten Tag Zusammen

Leider habe ich mit googlen keine gute Vorlage gefunden um meinen Momentanen Wunsch umzusetzen.

Was ich benötige wäre folgendes:


x1
x2
x3
x4

p1
p2
p3
p4


Sind die Elemente meines Netzwerkes

Jetzt möchte ich Angeben das:


x1 -- x2 mit Abstand 1 und Linientyp 1
x2 -- x3 mit Abstand 1 und Linientyp 1
x3--p1 mit Abstand 2 und Linientyp 2

usw

Ich möchte aber nicht die Koordinaten der Einzelnen Elemente angeben sondern nur wie sie mit einander verbunden sind und in welchem Abstand. Tikz sollte mir dann das sich daraus ergebende Netzwerk angeben und den Abstand zwischen den Elementen berücksichtigen.

Die Elemente sollten nur diese Buchstaben sein. Die Zahl muss tiefgestellt sein. Die Elemente dürfen nicht kursiv sein. Es braucht 2 Arten von Linien. Die Linien sollten sich beschriften lassen.

Lässt sich das leicht umsetzen ? Wenn ja wie?

Ich habe mir mal Bäume angeschaut bin mir aber nicht sicher ob das sinnvolle Vorlagen sind. Oft sind die dann auch "zu viel" für das was ich effektiv brauche.


Trauminsel
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 69
Registriert: Mi 13. Apr 2016, 10:21

Beitrag von Trauminsel »

Sorry der Kommentar ist nicht konstruktiv und bezieht sich nicht auf die Frage.

Ich kenne diese drei Hilfsmittel nur haben sie mir dieses mal nicht geholfen weil ich nicht mal weiss nach was ich genau suchen muss.

mir fehlen schlicht die nötigen Stichworte um mir selber zu helfen.
Leider habe ich mit googlen keine gute Vorlage gefunden um meinen Momentanen Wunsch umzusetzen.
Wenn du die kennst sehr gern ansonsten lieber nicht posten.

Gast

Beitrag von Gast »

http://texample.net/tikz/examples/area/networking oder forest? Mir nicht klar, was Dir daran nicht gefällt.

Stamm-

Ziel klar formulieren

Beitrag von Stamm- »

Wie soll denn die Hilfe aussehen, wenn noch nicht einmal klar ist, welches Ziel Du genau vor Augen hast? Wie also soll das Ergebnis aussehen? Ein Bild davon würde die äußerst sparsame Beschreibung deutlich unterstützen. Soll heißen: Schnappe dir einen Stift, fertige eine Zeichnung an, benutze einen Scanner zum Einlesen und hänge das Ergebnis an deinen nächsten Beitrag an. Oder verweise auf eine Seite mit einer Abbildung, die den eigenen Vorstellungen entspricht oder zumindest nahe kommt. Das aber nur, wenn noch Interesse an einer Lösung besteht.

Trauminsel
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 69
Registriert: Mi 13. Apr 2016, 10:21

Beitrag von Trauminsel »

vielleicht habe ich den code dann falsch verstanden.

Aber ich habe mir genau die beispiele dort angeschaut und was mir nicht gefällt das ich zum Beispiel


http://texample.net/tikz/examples/skype-topology/


eben vorgebe wo die peers und superpeers sind

ich möchte das sich die Positionen der peers aufgrund der Verbindungen die sie zu einander haben und dem Abstand den ich angebe verändere

ich möchte nicht vorgeben wo x1 und x2 und x3 etc. sind
sondern dies soll das Programm bestimmen....

Aber hier gebe ich doch eben Koordinaten an.


Ist das nicht möglich mit tikz? Ich weiss das man das machen kann mit komplizierten Programmen zur Netzwerkanalyse aber was ich brauche sind gerade mal 8 items und verschiedene Varianten davon.

Gast

Beitrag von Gast »

Und was ist Dein Problem mit forest (→ [d]forest[/d]) oder der tree (→ [d]pgf[/d])? Die sind zwar eher für Bäume als für Netze gedacht, aber mit ein paar zusätzlichen Beziehungen oder zusätzlichen \draw-Befehlen kann man auch Netze daraus machen. Allerdings können Netze auch beliebig kompliziert werden und dann muss man ggf. schon angeben, wo ein neuer Knoten relativ zu einem alten hin soll. Das ist aber ein Standardfeature von pgf. Es kommt eben auch darauf an, was Du für eine Art Netz es werden soll, siehe beispielsweise https://tex.stackexchange.com/questions ... using-tikz oder https://tex.stackexchange.com/questions ... -with-tikz.

Trauminsel
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 69
Registriert: Mi 13. Apr 2016, 10:21

Beitrag von Trauminsel »

Zuerst nachmals zur Verdeutlichung
\documentclass[tikz]{standalone}
\newcommand{\logik}[1]{\ensuremath{\mathrm{#1}}}
\begin{document}
\begin{tikzpicture}
	%Epistemische Systeme Kreise rationale Welt

	%Glaubensätze von S3
	\node (S3P1) at (-1,2) {\logik{\neg p_1}}; 
	\node (S3P2) at (0,3) {\logik{p_2}}; 
	\node (S3P3) at (0,1) {\logik{p_3}}; 
	\node (S3P4) at (1,2) {\logik{p_4}}; 
		
	%Linien für Verbindung der Glaubensätze S3
	\draw [thick] (S3P1) -- (S3P2); 
	\draw [thick] (S3P1) -- (S3P3); 
	\draw [thick] (S3P1) -- (S3P4); 
	\draw [thick] (S3P2) -- (S3P3); 	
	\draw [thick] (S3P2) -- (S3P4); 
	\draw [thick] (S3P3) -- (S3P4);
	
\end{tikzpicture}
\end{document}

Jetzt haben p1-p4 ja feste Positionen in dem ich die x-y Koordinaten angebe.


Was ich brauche ist aber, dass ich einzig angebe das p1 mit p2 verbunden ist. Nicht aber wo p1 und p2 sich genau befinden. Wenn es möglich ist würde ich gerne 2 Regeltypen definieren:

Regel 1
Was ist mit was Verbunden

Regel 2
Abstand der Verbindung in Relation zu allen anderen Verbindungen


Regel 1 sollte höher gewichtet werden als Regel 2.

Ist etwas verständlicher was ich überhaupt will? Ich versuche gerade herauszufinden was ich überhaupt fragen muss.....um mein Problem sinnvoll lösen zu können.


Ich gucke mir morgen an ob ich das mit dem Tree Vorschlag umsetzen kann was ich will.

Trauminsel
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 69
Registriert: Mi 13. Apr 2016, 10:21

Beitrag von Trauminsel »

Nein ich glaube das ist immer noch nicht genau was ich suche.

Für mich wäre es wichtig das ich dann mit wenig Aufwand auch leicht verschiedene mögliche Darstellungen generieren kann.

So ich wie ich die beiden vorgeschlagenen Codes verstanden habe ist das aber nicht der Fall :cry: da ich immer noch recht viele Angaben machen muss.

Kann sein das sich mein Wunsch gar nicht umsetzen lässt. Dann muss ich das halt von Hand machen oder mal gucken ob es ein anderes Programm gibt welches das mit wenig Aufwand kann und dann die Varianten welche ich für die Arbeit effektiv brauche dann selber nachzeichnen
:(

Aber vielleicht ist mein Problem mit dem Beitrag oben etwas klarer oder ich habe eure Vorschläge nicht richtig verstanden.

Gast

Beitrag von Gast »

Von Graphentheorie habe ich nicht wirklich viel Ahnung, aber das Zeichnen von Graphen mit gegebenen Knoten und Verbindungen ist eine hochgradig nichttriviale Angelegenheit (siehe z.B. diese Wiki-Übersichtsseite).

Ich bin immer wieder überrascht, wie viel TeX (hier in Form von TikZ mit LuaTeX) kann - vor einer halben Stunde hätte ich noch gesagt: Vergiss es, das ist keine Aufgabe für TeX, da braucht man spezielle Programme und Algorithmen für. Prinzipiell bin ich der Meinung noch immer, aber TikZ hat in Form seiner graph drawing library, die LuaTeX benötigt, (siehe Part IV der Dokumentation) tatsächlich automatische Lösungen für Graphen im Petto.

Das folgende Beispiel mit LuaLaTeX kompiliert ein paar automatische Möglichkeiten für Dein Beispiel
\documentclass{article}
\usepackage{mathtools}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{layered,force,trees}
\newcommand{\logik}[1]{\ensuremath{\mathrm{#1}}}
\begin{document}
\begin{tikzpicture}
   %Epistemische Systeme Kreise rationale Welt

   %Glaubensätze von S3
   \node (S3P1) at (-1,2) {\logik{\neg p_1}};
   \node (S3P2) at (0,3) {\logik{p_2}};
   \node (S3P3) at (0,1) {\logik{p_3}};
   \node (S3P4) at (1,2) {\logik{p_4}};
     
   %Linien für Verbindung der Glaubensätze S3
   \draw [thick] (S3P1) -- (S3P2);
   \draw [thick] (S3P1) -- (S3P3);
   \draw [thick] (S3P1) -- (S3P4);
   \draw [thick] (S3P2) -- (S3P3);
   \draw [thick] (S3P2) -- (S3P4);
   \draw [thick] (S3P3) -- (S3P4);
   
\end{tikzpicture}
\section{Tree}
\tikz[tree layout]{
   \node (S3P1) {\logik{\neg p_1}};
   \node (S3P2) {\logik{p_2}};
   \node (S3P3) {\logik{p_3}};
   \node (S3P4) {\logik{p_4}};

   \draw (S3P1) edge (S3P2)
         (S3P1) edge (S3P3)
         (S3P1) edge (S3P4)
         (S3P2) edge (S3P3)    
         (S3P2) edge (S3P4)
         (S3P3) edge (S3P4);
}
%
\tikz\graph[tree layout]{
  "\logik{\neg p_1}" --{ "\logik{p_2}", "\logik{p_3}", "\logik{p_4}"};
  "\logik{p_2}"--{"\logik{p_3}", "\logik{p_4}"};
  "\logik{p_3}"--"\logik{p_4}";
};

\section{Layered layout}
\tikz[layered layout]{
   \node (S3P1) {\logik{\neg p_1}};
   \node (S3P2) {\logik{p_2}};
   \node (S3P3) {\logik{p_3}};
   \node (S3P4) {\logik{p_4}};

   \draw (S3P1) edge (S3P2)
         (S3P1) edge (S3P3)
         (S3P1) edge (S3P4)
         (S3P2) edge (S3P3)    
         (S3P2) edge (S3P4)
         (S3P3) edge (S3P4);
}
%
\tikz\graph[layered layout]{
  "\logik{\neg p_1}" --{ "\logik{p_2}", "\logik{p_3}", "\logik{p_4}"};
  "\logik{p_2}"--{"\logik{p_3}", "\logik{p_4}"};
  "\logik{p_3}"--"\logik{p_4}";
};

\section{Force}
\tikz[random seed=0, spring layout]{
   \node (S3P1) {\logik{\neg p_1}};
   \node (S3P2) {\logik{p_2}};
   \node (S3P3) {\logik{p_3}};
   \node (S3P4) {\logik{p_4}};

   \draw (S3P1) edge (S3P2)
         (S3P1) edge (S3P3)
         (S3P1) edge (S3P4)
         (S3P2) edge (S3P3)    
         (S3P2) edge (S3P4)
         (S3P3) edge (S3P4);
}
%
\tikz\graph[random seed=0, spring layout]{
  "\logik{\neg p_1}" --{ "\logik{p_2}", "\logik{p_3}", "\logik{p_4}"};
  "\logik{p_2}"--{"\logik{p_3}", "\logik{p_4}"};
  "\logik{p_3}"--"\logik{p_4}";
};
\end{document}
Das sieht jetzt nicht unbedingt so aus, wie Du es haben wolltest (die letzte Möglichkeit kommt Deinem Wunsch vergleichsweise nah).

Zum Thema gibt es auch eine kleine Präsentation vom TikZ-Entwickler http://www.tcs.uni-luebeck.de/downloads ... tation.pdf, ein Paper von ihm https://doi.org/10.1007/978-3-642-36763-2_46 und eine Diplomarbeit eines seiner Studenten http://www.tcs.uni-luebeck.de/downloads ... hlmann.pdf Außerdem ist die Dokumentation natürlich Anlaufstelle Nummer eins, der für die Automatik interessante Teil ist Part IV: Graph Drawing, S. 363-509.

Wenn Deine Vorstellung von dem fertigen Graphen nicht mit den hier algorithmisch generierten Ausgaben übereinstimmt, dann müsstest Du wohl für Deine Wünsche einen neuen Algorithmus implementieren.

Ohne diese Schwarzmagie des Graphenmalens bietet TikZ standardmäßig und mit der Library positioning erweiterte Möglichkeiten, Nodes relativ zueinander zu positionieren, ohne feste Koordinaten angeben zu müssen. Das macht die Sache für Dich nicht viel besser, aber schon etwas angenehmer. Beispiel: https://tex.stackexchange.com/q/79693/35864

Antworten