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 pgfplotstable
lädt pgfplots
und pgfplots
lädt tikz
, daher laden Sie nur eines dieser Pakete.
Bei diesem Ansatz müssen Sie zunächst die Daten aus der Datei lesen \pgfplotstableread
und 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 \pgfplotstablegetelem
kö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}
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}