Seite 1 von 1

Daten mit TikZ einlesen und bearbeiten

Verfasst: Mi 15. Aug 2018, 13:46
von Neuling :)
Hallo,

ich bin neu hier, falls ich also Fehler mache, bitte verzeiht und sagt es mir.

Ich bin auch in Latex noch nicht so erfahren und versuche mir alles so gut es geht zusammen zu bauen. Für mein aktuelles Problem hab ich aber noch keine Lösung gefunden und wäre für jede Idee sehr dankbar.

Jetzt zum Problem:
Ich habe eine Liste mit x-, y- und z-Koordinaten. Diese würde ich gern irgendwie einlesen und jedem Punkt (xi, yi, zi) eine Coordinate zuordnen, um dann später daraus was zu zeichnen.

Bis jetzt habe ich immer zu Fuß die Koordinaten übertragen, also mit
\coordinate (a) at (x1,y1,z1);
\coordinate (a) at (x2,y2,z2);

Zum Beispiel:
\documentclass[%
  a4paper,%
  11pt,%
]{scrartcl}
\usepackage[utf8x]{inputenc}

\usepackage[english, ngerman]{babel}

%%% Zeichenpakete
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{graphicx}

\begin{document}
\begin{tikzpicture}
	\coordinate (a) at (0,0,0);
	\coordinate (b) at (0,10,0);
	\coordinate (c) at (10,10,0);
	\coordinate (d) at (10,0,0);
	\coordinate (e) at (0,0,-10);
	\coordinate (f) at (0,10,-10);
	\coordinate (g) at (10,10,-10);
	\coordinate (h) at (10,0,-10);
	\coordinate (i) at (5,15,-5);
	
	\draw (a) -- (b);
	\draw (b) -- (c);
	\draw (c) -- (d);
	\draw (d) -- (a);
	\draw (e) -- (f);
	\draw (f) -- (g);
	\draw (g) -- (h);
	\draw (h) -- (e);
	\draw (a) -- (e);
	\draw (b) -- (f);
	\draw (c) -- (g);
	\draw (d) -- (h);
	\draw (b) -- (i);
	\draw (c) -- (i);
	\draw (f) -- (i);
	\draw (g) -- (i);
	

\end{tikzpicture}


\end{document}
Jetzt habe ich aber langsam so viele Daten, dass das etwas anstrengend ist.

Ich habe schon gelesen, dass man Plots erstellen kann, etwa:
\documentclass[%
  a4paper,%
  11pt,%
]{scrartcl}
\usepackage[utf8x]{inputenc}

\usepackage[english, ngerman]{babel}

%%% Zeichenpakete
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{graphicx}

\usepackage{filecontents}
\begin{filecontents*}{data.txt}
	0 	0 	0
	0 	10 	0
	10 	10 	0
	10 	0 	0
	0 	0 	-10
	0 	10 	-10
	10 	10 	-10
	10 	0 	-10
	5 	15 	-5
\end{filecontents*}

\begin{document}

\begin{tikzpicture}

\begin{axis}
\addplot [ycomb] table{data.txt};
\end{axis}
\end{tikzpicture}
\end{document}

Aber erstens will ich gerade die Achsen nicht haben, und zweitens werden da die Verbindungen der Punkte automatisch generiert und das brauche ich ja auch nicht. Ich will ja eigentlich die Punkte ansprechen und selbst sagen, mit welchem sie verbunden sein sollen.

Was Anderes habe ich bis jetzt noch nicht gefunden.
Ich hoffe, ich konnte mein Problem einigemaßen deutlich machen (und das mit dem Minimalbeispiel richtig umsetzen)
Kann mir hier eventuell jemand helfen? Ich wäre für jeden Tipp dankbar!

Liebe Grüße
und schonmal vielen Dank
Der Neuling

Verfasst: Do 16. Aug 2018, 23:24
von esdd
Du könntest das Paket pgfplotstable nutzen. Im folgenden Beispiel werden die Koordinaten mit c0 bis c8 bezeichnet.
\documentclass{scrartcl} 

\usepackage{pgfplotstable}% lädt pgfplots, tikz, graphicx, ...
\pgfplotsset{compat=newest}% aktuell ist Version 1.16

\usepackage{filecontents} 
\begin{filecontents*}{data.txt} 
    0    0    0 
    0   10    0 
   10   10    0 
   10    0    0 
    0    0  -10 
    0   10  -10 
   10   10  -10 
   10    0  -10 
    5   15   -5 
\end{filecontents*}

\begin{document}
\begin{tikzpicture}

\pgfplotstableread{data.txt}{\data}
\pgfplotstablegetrowsof{\data}% Anzahl der Zeilen
\newcommand*\lastrow{}
\pgfmathtruncatemacro\lastrow{\pgfplotsretval-1}% letzte Zeilennummer

\foreach \r in {0,...,\lastrow}{
  \pgfplotstablegetelem{\r}{0}\of\data
  \edef\cx{\pgfplotsretval}
  \pgfplotstablegetelem{\r}{1}\of\data
  \edef\cy{\pgfplotsretval}
  \pgfplotstablegetelem{\r}{2}\of\data
  \edef\cz{\pgfplotsretval}
  \coordinate(c\r)at(\cx,\cy,\cz);
}

\draw
  (c0) foreach \i in {1,2,3}{--(c\i)}--cycle
  (c4) foreach \i in {5,6,7}{--(c\i)}--cycle
  foreach[evaluate={\j=\i+4}] \i in {0,...,3}{(c\i)--(c\j)}
  (c8) foreach \i in {1,2,5,6}{edge(c\i)}
;

\end{tikzpicture}
\end{document}

Verfasst: Fr 17. Aug 2018, 00:17
von Neuling :)
Guten Abend,

vielen Dank für die Antwort!!
Genau so was hab ich gesucht. :D

Jetzt guck ich mal, dass ich das auf meine eigentlichen Daten anwenden kann.

Das hat mir wirklich sehr geholfen!

Danke und
Viele Grüße