Hallo zusammen,

ich habe das Problem, dass ich gerne Messwerte, welche in Koordinatenform in einer externen CSV-Datei gespeichert sind, einzeln mit Hilfe von Latex zeichnen möchte, so dass ich in einer Art Präsentation die einzelnen Punkte nach und nach aufbauen lassen kann.

Mein Quellcode für die Umsetzung der Punkte in eine Zeichnung sieht wie folgt aus:

\documentclass[tikz,a4paper,margin=1mm]{standalone}
\begin{filecontents}{TAK_12.csv}
-0.149;-2.584
0.467;1.496
-0.717;-6.811
-0.551;-6.460
-0.418;-6.100
\end{filecontents}
\usepackage{pgfplots}
\usepackage[ansinew]{inputenc}
\pgfplotsset{compat=1.16}
\begin{document}
\pgfdeclareplotmark{odot}
{\pgfpathcircle{\pgfpoint{0pt}{0pt}}{2.5pt}\pgfusepathqstroke
\pgfpathcircle{\pgfpoint{0pt}{0pt}}{0.5pt}\pgfusepathqfill}
\begin{tikzpicture}
\begin{axis}[x=1cm,y=1cm]
\addplot[mark=odot,only marks,mark size=1pt,red] table[col sep=semicolon] {TAK_12.csv};
\end{axis}
\end{tikzpicture}
\end{document}

Die CSV-Datei ist wie folgt aufgebaut:

-0.149;-2.584
0.467;1.496
-0.717;-6.811
-0.551;-6.460
-0.418;-6.100

Dabei ist der erste Wert pro Zeile die x-Koordinate und der zweite Wert (nach dem Semicolon) die y-Koordinate des jeweiligen Messpunkts.

Nun sollen die Punkte alle eingezeichnet werden und am Ende möchte ich eine Datei, in der ich quasi nach und nach jeden einzelnen Punkt erscheinen lassen kann, bis dann am Schluss alle Punkte gemeinsam auf dem Bild sind. Ich hoffe, mein Problem ist verständlich und dass mir die Community weiter helfen kann.

Herzlichen Dank und beste Grüße

Wienie2401

gefragt 29 Sep, 10:37

Wienie2401's gravatar image

Wienie2401
14048
Akzeptiert-Rate: 0%

geschlossen 10 Okt, 12:31


Zwar beherrscht pgfplots die Möglichkeit, Tabellenzeilen am Anfang per skip first n zu überspringen, aber nur n Zeilen aus der Tabelle zu lesen, ist bisher nicht vorgesehen. Allerdings kann man einen Filter definieren, wobei pgfplots AFAIK zuerst x filter, dann y filter und bei 3D-plots zum Schluss auch noch z filter anwendet. Im Filterausdruck kann man auch beispielsweise per \coordindex auf die Nummer der Koordinate des Plots zugreifen. Näheres dazu ist den Abschnitten 8.2 und 4.22 der pgfplots-Anleitung zu entnehmen.

Jetzt muss man also nur noch eine Schleife über die Anzahl der Koordinaten bilden, beispielsweise:

\documentclass[tikz,a4paper,margin=1mm]{standalone}
\begin{filecontents}{TAK_12.csv}
-0.149;-2.584
0.467;1.496
-0.717;-6.811
-0.551;-6.460
-0.418;-6.100
\end{filecontents}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\pgfdeclareplotmark{odot}
{\pgfpathcircle{\pgfpoint{0pt}{0pt}}{2.5pt}\pgfusepathqstroke
\pgfpathcircle{\pgfpoint{0pt}{0pt}}{0.5pt}\pgfusepathqfill}

\foreach \tabindex in {0,1,...,4} {%
\begin{tikzpicture}
\begin{axis}[x=1cm,y=1cm]
\addplot[mark=odot,only marks,mark size=1pt,white,
] table[col sep=semicolon] {TAK_12.csv};
\addplot+[mark=odot,only marks,mark size=1pt,red,
x filter/.expression={\coordindex <= \tabindex ? x : nan}
] table[col sep=semicolon] {TAK_12.csv};
\end{axis}
\end{tikzpicture}}
\end{document}

Es sei darauf hingewiesen, dass ich die Zeile

\usepackage[ansinew]{inputenc}

entfernt habe, weil eigentlich alle modernen LaTeX-Editoren (und auch der Online-Editor) auf UTF8 voreingestellt sind und das seit April 2018 unabhängig von der verwendeten TeX-Engine auch die Voreinstellung von LaTeX ist.

Darüber hinaus, habe ich \pgfplotsset{compat=1.16} angepasst, weil die aktuelle pgfplots-Version längst bei 1.18 angekommen ist und ich niemanden dazu verleiten will, ohne zwingenden Grund auf Kompatibilität zu einer älteren Version zurück zu schalten.

Es sei auch darauf hingewiesen, dass man die Größe des Plots sicher auf elegantere Art einstellen kann, als ihn jeweils erst einmal komplett aber unsichtbar und dann sichtbar nur bis zum gewünschten Punkt zu zeichnen. Aber mir erschien das die einfachste Methode, um die Größe quasi automatisch aus allen Punkten zu bestimmen. Natürlich könnte man dafür – ebenso wie für die Bestimmung der Anzahl der Punkte insgesamt – auch eine eigene Schleife über die Punkt voranstellen. Das wäre aber ggf. eine neue Frage.

Permanenter link

beantwortet 08 Okt, 10:13

Ijon%20Tichy's gravatar image

Ijon Tichy
10.8k31733
Akzeptiert-Rate: 52%

Hallo Ijon Tichy,

vielen Dank für diese Antwort, es funktioniert wunderbar so wie ich es mir vorgestellt habe!! Allerdings sagt mir mein TeX-Editor (TeX-Maker), dass ich nicht \pgfplotsset{compat=1.18} verwenden kann/darf, sondern höchstens 1.17. Dennoch funktioniert der Quellcode wunderbar. Ich danke dir nochmals sehr herzlich!

Beste Grüße

Wienie

(10 Okt, 12:31) Wienie2401
1

@Wiener Danke geht bei uns mit dem Daumen hoch. Und statt die Frage zu schließen, wird eine Antwort mit dem Klick auf den Haken akzeptiert → Ich habe auf meine Frage eine Antwort bekommen. Wie geht es weiter? Die Möglichkeit eine Frage zu schließen, ist nur für Ausnahmefälle gedacht, wenn eine Frage per Kommentar beantwortet wurde, es aber vermutlich nie eine ausführliche Antwort geben wird.

Wenn bei dir compat=1.18 nicht möglich ist, ist dein pgfplots nicht aktuell. Allerdings sollte das pgfplots beim LaTeX-Lauf melden. Der Editor ist zweitrangig.

(10 Okt, 15:23) Ijon Tichy
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×706
×284
×128
×4

gestellte Frage: 29 Sep, 10:37

Frage wurde gesehen: 432 Mal

zuletzt geändert: 10 Okt, 15:23