Graph mit tikz < LaTeX < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 22:02 Mo 04.05.2009 | Autor: | Bastiane |
Hallo!
Lange hab' ich mich drum gedrückt, jetzt wollte ich es doch nochmal versuchen, nämlich ein simples neuronales Netz, also nichts anderes als einen Graphen, mit tikz zu zeichnen. Das einzige, was ich bisher hinbekommen habe, ist folgendes:
[Dateianhang nicht öffentlich]
Viel komplexer soll es nicht werden, weiß nicht, ob ich da noch irgendwelche Beschriftungen dran haben will, aber die Verbindungen kann ich so ja nicht stehen lassen. Wie bekomme ich es am einfachsten hin, dass die Linien erst außerhalb der Kreise anfangen?
In einem anderen kleineren Fall habe ich mir den Winkel, in dem die Linie vom Mittelpunkt aus weggeht, berechnet, und dann einfach in dem Winkel im Radiusabstand erst mit der Linie angefangen. Aber hier ist mir das zu umständlich - da muss es doch was einfacheres geben!?
Wäre super, wenn mir jemand weiterhelfen könnte.
Ach ja, vllt hilft der Quelltext:
1: |
| 2: | \node (a) at (0,0);
| 3: | \draw (a) circle (0.5cm);
| 4: | \node (b) at (2,0);
| 5: | \draw (b) circle (0.5cm);
| 6: | \node (c) at (4,0);
| 7: | \draw (c) circle (0.5cm);
| 8: |
| 9: | \node (d) at (-1,-2);
| 10: | \draw (d) circle (0.5cm);
| 11: | \node (e) at (1,-2);
| 12: | \draw (e) circle (0.5cm);
| 13: | \node (f) at (3,-2);
| 14: | \draw (f) circle (0.5cm);
| 15: | \node (g) at (5,-2);
| 16: | \draw (g) circle (0.5cm);
| 17: |
| 18: | \draw (a) -- (d);
| 19: | \draw (a) -- (e);
| 20: | \draw (a) -- (f);
| 21: | \draw (a) -- (g);
| 22: | \draw (b) -- (d);
| 23: | \draw (b) -- (e);
| 24: | \draw (b) -- (f);
| 25: | \draw (b) -- (g);
| 26: | \draw (c) -- (d);
| 27: | \draw (c) -- (e);
| 28: | \draw (c) -- (f);
| 29: | \draw (c) -- (g);
|
Viele Grüße
Bastiane
Dateianhänge: Anhang Nr. 1 (Typ: png) [nicht öffentlich]
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 02:08 Di 05.05.2009 | Autor: | rainerS |
Hallo Bastiane!
> Hallo!
>
> Lange hab' ich mich drum gedrückt, jetzt wollte ich es doch
> nochmal versuchen, nämlich ein simples neuronales Netz,
> also nichts anderes als einen Graphen, mit tikz zu
> zeichnen. Das einzige, was ich bisher hinbekommen habe, ist
> folgendes:
>
> [Dateianhang nicht öffentlich]
>
> Viel komplexer soll es nicht werden, weiß nicht, ob ich da
> noch irgendwelche Beschriftungen dran haben will, aber die
> Verbindungen kann ich so ja nicht stehen lassen. Wie
> bekomme ich es am einfachsten hin, dass die Linien erst
> außerhalb der Kreise anfangen?
> In einem anderen kleineren Fall habe ich mir den Winkel,
> in dem die Linie vom Mittelpunkt aus weggeht, berechnet,
> und dann einfach in dem Winkel im Radiusabstand erst mit
> der Linie angefangen. Aber hier ist mir das zu umständlich
> - da muss es doch was einfacheres geben!?
>
> Wäre super, wenn mir jemand weiterhelfen könnte.
>
> Ach ja, vllt hilft der Quelltext:
In der Tat
Zunächst einmal erzeugt jedes der node-Kommandos eine Fehlermeldung (A node must have a (possibly empty) label text.), weil {} vor dem Semicolon fehlt.
Das Problem ist, dass die Kreise nichts mit den Knoten zu tun haben. Mal die Knoten als Kreise:
1: |
| 2: | \node (a) at (0,0) [minimum size=1cm,circle,draw] {};
| 3: | \node (b) at (2,0) [minimum size=1cm,circle,draw] {};
| 4: | \node (c) at (4,0) [minimum size=1cm,circle,draw] {};
| 5: | \node (d) at (-1,-2) [minimum size=1cm,circle,draw] {};
| 6: | \node (e) at (1,-2) [minimum size=1cm,circle,draw] {};
| 7: | \node (f) at (3,-2) [minimum size=1cm,circle,draw] {};
| 8: | \node (g) at (5,-2) [minimum size=1cm,circle,draw] {};
| 9: |
| 10: | \draw (a) -- (d);
| 11: | \draw (a) -- (e);
| 12: | \draw (a) -- (f);
| 13: | \draw (a) -- (g);
| 14: | \draw (b) -- (d);
| 15: | \draw (b) -- (e);
| 16: | \draw (b) -- (f);
| 17: | \draw (b) -- (g);
| 18: | \draw (c) -- (d);
| 19: | \draw (c) -- (e);
| 20: | \draw (c) -- (f);
| 21: | \draw (c) -- (g);
| 22: |
|
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 16:16 Di 05.05.2009 | Autor: | Bastiane |
Hallo Rainer!
> Zunächst einmal erzeugt jedes der node-Kommandos eine
> Fehlermeldung (A node must have a (possibly empty) label
> text.), weil {} vor dem Semicolon fehlt.
Stimmt, die Fehlermeldung hatte ich immer. Aber alle Möglichkeiten, die ich ausprobiert hatte, hatten nicht geholfen, deswegen hatte ich es aufgegeben und diesen Fehler erstmal ignoriert. Irgendwie hatte ich es wohl an die falsche Stelle gesetzt...
> Das Problem ist, dass die Kreise nichts mit den Knoten zu
> tun haben. Mal die Knoten als Kreise:
Super, es funktioniert, aber kannst du mir erklären, wie genau das jetzt interpretiert wird? Was heißt denn, ich soll die Knoten als Kreise malen? Ist dann der ganze Kreis ein Knoten? Aber welche Koordinate gehört dann zum Knoten?
> [mm]\node[/mm] (a) at (0,0) [minimum size=1cm,circle,draw] {};
Was genau bedeutet das in den eckigen Klammern bzw. welche Optionen gäbe es da noch? Warum z. B. "minimum size", eigentlich wollte ich es genau 1 cm groß haben bzw. der Radius sollte glaub' ich 1cm sein. Und wenn ich z. B. das ganze Bildchen jetzt kleiner haben will und dafür [scale=0.6] eingebe, dann macht er alles kleiner, nur die Kreise bleiben gleich groß.
> [mm]\draw[/mm] (a) -- (d);
Und wieso schafft er es jetzt, erst "außerhalb" der Kreise mit den Linien anzufangen? Und was mich noch wundert, irgendwie scheint der ganze Kreis als Koordinate (0,0) z. B. gewertet zu werden. Wenn ich z. B. oben an den Kreis noch eine kurze Linie zeichne, dann reicht es, zu sagen, dass ich von dem Kreis, wenn er die Koordinate (0,0) hat, einfach nach (0,0.5) zeichne. Eigentlich müsste solch eine Linie doch im Kreis versteckt sein, jedenfalls wenn ich es so interpretiere, wie ich es vorher gezeichnet hatte, dass nämlich der Kreismittelpunkt die Koordinate (0,0) hat.
Aber deine Antwort hat mir die Arbeit schon sehr erleichtert. Gibt es solche einfachen Sachen irgendwo zum Nachlesen? Ich hab' bisher nur komplexe Beispiele und ohne grundlegende Erklärungen gefunden. :-(
Viele Grüße
Bastiane
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:12 Di 05.05.2009 | Autor: | rainerS |
Hallo Bastiane!
> Hallo Rainer!
>
> > Zunächst einmal erzeugt jedes der node-Kommandos eine
> > Fehlermeldung (A node must have a (possibly empty) label
> > text.), weil {} vor dem Semicolon fehlt.
>
> Stimmt, die Fehlermeldung hatte ich immer. Aber alle
> Möglichkeiten, die ich ausprobiert hatte, hatten nicht
> geholfen, deswegen hatte ich es aufgegeben und diesen
> Fehler erstmal ignoriert. Irgendwie hatte ich es wohl an
> die falsche Stelle gesetzt...
>
> > Das Problem ist, dass die Kreise nichts mit den Knoten zu
> > tun haben. Mal die Knoten als Kreise:
>
> Super, es funktioniert, aber kannst du mir erklären, wie
> genau das jetzt interpretiert wird? Was heißt denn, ich
> soll die Knoten als Kreise malen? Ist dann der ganze Kreis
> ein Knoten? Aber welche Koordinate gehört dann zum Knoten?
Ein Knoten (node) ist ein Objekt, sagen wir mal, ein Stück Text, das an der aktuellen Position eingefügt wird. Der Text steht in {}, in deinem Fall hast du also leeren Text. Außerdem hat der Knoten eine Form (rectangle, circle, ...) und eine Mindestgröße (Mindesthöhe und -breite). Der Knoten wird aber automatisch so groß wie der Text, wenn dessen Größe die Mindestgröße überschreitet.
In deiner Eingabe hat er wohl wegen der fehlenden {} ein Leerzeichen als Text genommen und dann für den Knoten ein entsprechendes Rechteck vorgesehen. Ohne die Option draw wird kein Rahmen gemalt, also war dein Knoten ein weißes Rechteck auf weißen Grund. Um das zu sehen, kannst du
\node (a) at (0,0) [draw] {}
probieren, dann wird der Rand gezeichnet.
Mit der Anweisung \draw (a) circle (0.5cm); zeichnest du einen Kreis vom Radius 0,5cm um die Koordinate des Knotens (a). Mit \draw (a) -- (d); zeichnest du eine Linie vom Rand des Knotens (a) zum Rand des Knotens (b). Der Rand des Knotens ist der Rand des kleinen Rechtecks, nicht des Kreises.
> > [mm]\node[/mm] (a) at (0,0) [minimum size=1cm,circle,draw] {};
>
> Was genau bedeutet das in den eckigen Klammern
Der Knoten soll mindestens 1cm groß sein, Kreisform haben, der Rand soll gezeichnet werden. Der Effekt ist eine Kreislinie mit Durchmesser 1cm.
> bzw. welche
> Optionen gäbe es da noch? Warum z. B. "minimum size",
Wie geschrieben, weil sonst die Größe nur durch den Text in {} automatisch festgelegt wird.
> eigentlich wollte ich es genau 1 cm groß haben bzw. der
> Radius sollte glaub' ich 1cm sein. Und wenn ich z. B. das
> ganze Bildchen jetzt kleiner haben will und dafür
> [scale=0.6] eingebe, dann macht er alles kleiner, nur die
> Kreise bleiben gleich groß.
scale= ist eine Koordinatentransformation; diese wirken nur auf die Koordinaten der Objekte, nicht auf ihre Größe.
>
> > [mm]\draw[/mm] (a) -- (d);
>
> Und wieso schafft er es jetzt, erst "außerhalb" der Kreise
> mit den Linien anzufangen? Und was mich noch wundert,
> irgendwie scheint der ganze Kreis als Koordinate (0,0) z.
> B. gewertet zu werden. Wenn ich z. B. oben an den Kreis
> noch eine kurze Linie zeichne, dann reicht es, zu sagen,
> dass ich von dem Kreis, wenn er die Koordinate (0,0) hat,
> einfach nach (0,0.5) zeichne. Eigentlich müsste solch eine
> Linie doch im Kreis versteckt sein, jedenfalls wenn ich es
> so interpretiere, wie ich es vorher gezeichnet hatte, dass
> nämlich der Kreismittelpunkt die Koordinate (0,0) hat.
Richtig. Bei Koordinaten bedeutet (a) den Mittelpunkt. Knoten sind die Ausnahme, vermutlich weil die meisten Nutzer es so praktisch finden. Wenn du es genau angeben willst, wo die Linie anfängt, kannst du zum Beispiel (a.center) statt (a) für den Mittelpunkt nehmen, oder (a.south), um unten in der Mitte anzufangen.
Schau mal in die Tutorien im TikZ-Handbuch, und für die Details zu Knoten in Kapitel 15.
Viele Grüße
Rainer
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:52 Do 07.05.2009 | Autor: | Bastiane |
Hallo Rainer!
> Der Knoten soll mindestens 1cm groß sein, Kreisform haben,
> der Rand soll gezeichnet werden. Der Effekt ist eine
> Kreislinie mit Durchmesser 1cm.
>
> > bzw. welche
> > Optionen gäbe es da noch? Warum z. B. "minimum size",
>
> Wie geschrieben, weil sonst die Größe nur durch den Text in
> {} automatisch festgelegt wird.
Und was schreibe ich, wenn ich ihn genau 1 cm groß haben will? Oder höchstens?
> > eigentlich wollte ich es genau 1 cm groß haben bzw. der
> > Radius sollte glaub' ich 1cm sein. Und wenn ich z. B. das
> > ganze Bildchen jetzt kleiner haben will und dafür
> > [scale=0.6] eingebe, dann macht er alles kleiner, nur die
> > Kreise bleiben gleich groß.
>
> scale= ist eine Koordinatentransformation; diese wirken nur
> auf die Koordinaten der Objekte, nicht auf ihre Größe.
Und wie bekomme ich nun so ein ganzes Bildchen kleiner? Was muss ich da wo eingeben?
Viele Grüße
Bastiane
|
|
|
|
|
Hallo Bastiane,
durch die scale-Option kannst Du tikz-Bilder verkleinern, zusätzlich empfiehlt sich die Option transform shape:
\begin{tikzpicture}[scale=0.5, transform shape] ...
Viele Grüße,
Stefan
|
|
|
|