So zeichnen Sie mit Tikz Knoten aus einer TXT-Datei

So zeichnen Sie mit Tikz Knoten aus einer TXT-Datei

Ich habe also im Grunde ein Tikz-Bild und möchte 36 Knoten in dieses Bild einfügen. Derzeit ist die einzige mir bekannte Möglichkeit, sie einzubinden, das Schreiben von

\filldraw[blue] (3.8,3.6) circle (1pt) node[anchor=west]{};

Ich möchte das wirklich nicht für alle 36 Knoten tun. Ich habe die Koordinaten für die 36 Knoten in einer TXT-Datei. Gibt es also eine Möglichkeit, sie zu lesen und automatisch zu zeichnen? Ich möchte die Punkte nicht miteinander verbinden, es handelt sich also nicht um das Zeichnen eines Pfads oder einer Linie.

Dies ist ein Beispiel dafür, wie die Punkte in die txt-Datei geschrieben werden

0,1

.1 0

.5 0,5

0,4 .9 und so weiter

Ich habe es versucht, aber es hat nicht funktioniert

\foreach \x \y  in table {GPs.txt}
\draw[blue] (\x,\y) circle (1pt) node[anchor=west]{};

So erstelle ich mein Bild

\documentclass[margin=5mm]{standalone}
\usepackage[utf8]{inputenc}
% TikZ
\usepackage{tikz}
\usetikzlibrary{patterns}
\usetikzlibrary{external}

% Pgfplots
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{groupplots}
\usepgfplotslibrary{fillbetween}
\usepgfplotslibrary{colormaps}

\newcommand{\sinv}{s\textsuperscript{$-1$}}

\begin{document}

\begin{tikzpicture}
\draw [fill=gray!10] (0, 0) rectangle (5, 5);
\draw [fill=red!10] (5,0) -- (4.5,0) arc [start angle=0, delta angle=90, radius=4.5] (0,4.5) -- (0,5) -- (5,5) -- (5,0) ;
\draw (2.5,0) -- (2.5,5);
\draw (0,2.5) -- (5,2.5);
\draw (3.1820,3.1820) -- (5,5);
%\draw (5,2.5) node[anchor=south] {.};
\filldraw[black] (5,2.5) circle (2pt) node[anchor=west]{};
\filldraw[black] (5,5) circle (2pt) node[anchor=west]{};
\filldraw[black] (2.5,5) circle (2pt) node[anchor=west]{};
\filldraw[black] (5,0) circle (2pt) node[anchor=west]{};
\filldraw[black] (0,5) circle (2pt) node[anchor=west]{};
\filldraw[black] (4.5,0) circle (2pt) node[anchor=west]{};
\filldraw[black] (0,4.5) circle (2pt) node[anchor=west]{};
\filldraw[black] (3.7417,2.5) circle (2pt) node[anchor=west]{};
\filldraw[black] (2.5,3.7417) circle (2pt) node[anchor=west]{};
\end{tikzpicture}

\end{document}

Antwort1

Wenn Sie die Funktionalität von PGFplots, das Funktionen zum Lesen von Daten aus Dateien bereitstellt, nicht nutzen möchten, können Sie die vom Paket bereitgestellten Mechanismen verwenden pgfplotstable. Beachten Sie, dass pgfplotstablelädt pgfplotsund pgfplotslädt tikz, daher laden Sie nur eines dieser Pakete.

Bei diesem Ansatz müssen Sie zunächst die Daten aus der Datei lesen \pgfplotstablereadund in einer Variablen speichern. Anschließend können Sie die Anzahl der Zeilen berechnen und mithilfe von eine Schleife über die Zeilen ausführen \foreach. Mithilfe von \pgfplotstablegetelemkönnen Sie dann die relevanten Koordinaten aus den Tabellendaten abrufen.

Ich habe einige Teile Ihres Codes vereinfacht.

\begin{filecontents}{GPs.dat}
0 .1
.1 0
.5 0.5
0.4 .9 
\end{filecontents}

\documentclass[margin=5mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}

\begin{document}

\begin{tikzpicture}
\draw[fill=gray!10] (0, 0) rectangle (5, 5);
\draw[fill=red!10] (5,0) -- (4.5,0) arc[start angle=0, delta angle=90, radius=4.5] 
    -- (0,4.5) -- (0,5) -- (5,5) -- cycle;
\draw (2.5,0) -- (2.5,5)
      (0,2.5) -- (5,2.5)
      (3.1820,3.1820) -- (5,5);
\foreach \x/\y in {5/2.5, 5/5, 2.5/5, 5/0, 0/5, 4.5/0, 0/4.5, 3.7417/2.5, 2.5/3.7417} {
    \filldraw[black] (\x,\y) circle[radius=2pt];
}

\pgfplotstableread{GPs.dat}\loadedtable

\pgfplotstablegetrowsof{\loadedtable}
\pgfmathtruncatemacro\loadedtablerowcount{\pgfplotsretval-1} 

\foreach \i in {0,...,\loadedtablerowcount}{
    \pgfplotstablegetelem{\i}{[index]0}\of{\loadedtable}
    \pgfmathsetmacro{\x}{\pgfplotsretval}
    \pgfplotstablegetelem{\i}{[index]1}\of{\loadedtable}
    \pgfmathsetmacro{\y}{\pgfplotsretval}
    \draw[blue] (\x,\y) circle (1pt);
}
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben


Eine Lösung mit PGFplots könnte wie folgt aussehen:

\begin{filecontents}{GPs.dat}
0 .1
.1 0
.5 0.5
0.4 .9 
\end{filecontents}

\documentclass[margin=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
    
\begin{document}

\begin{tikzpicture}
\begin{axis}[
    axis equal,
    axis line style={draw=none},
    xtick=\empty,
    ytick=\empty,
    xmin=0, 
    xmax=5,
    ymin=0,
    ymax=5,
    clip=false,
]
\draw[fill=gray!10] (0, 0) rectangle (5, 5);
\draw[fill=red!10] (5,0) -- (4.5,0) arc[start angle=0, delta angle=90, radius=4.5] 
    -- (0,4.5) -- (0,5) -- (5,5) -- cycle;
\draw (2.5,0) -- (2.5,5)
      (0,2.5) -- (5,2.5)
      (3.1820,3.1820) -- (5,5);
\pgfplotsforeachungrouped \x/\y in 
    {5/2.5, 5/5, 2.5/5, 5/0, 0/5, 4.5/0, 0/4.5, 3.7417/2.5, 2.5/3.7417} {
    \edef\temp{\noexpand\filldraw[black] (\x,\y) circle[radius=2pt];}\temp
}

\addplot[blue, only marks, mark=o, mark size=1pt] table {GPs.dat};
\end{axis}
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen