Básicamente, tengo una imagen tikz y me gustaría incluir 36 nodos dentro de esta imagen. Actualmente, la única forma que conozco de incluirlos es escribir
\filldraw[blue] (3.8,3.6) circle (1pt) node[anchor=west]{};
Realmente no quiero hacer esto para los 36 nodos. Tengo las coordenadas de los 36 nodos en un archivo txt, entonces, ¿hay alguna manera de leerlas y dibujarlas automáticamente? No quiero conectar los puntos entre sí, por lo que no es un trazado de ruta o de línea.
este es un ejemplo de como se escriben los puntos en el archivo txt
0 .1
.1 0
.5 0.5
0.4 .9 y así sucesivamente
Intenté hacer esto pero no funcionó.
\foreach \x \y in table {GPs.txt}
\draw[blue] (\x,\y) circle (1pt) node[anchor=west]{};
Así estoy generando mi foto.
\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}
Respuesta1
Si no desea emplear la funcionalidad de PGFplots que proporciona funciones para leer datos de archivos, puede utilizar la mecánica proporcionada por el paquete pgfplotstable
. Tenga en cuenta que pgfplotstable
carga pgfplots
y pgfplots
carga tikz
, por lo tanto, solo carga uno de estos paquetes.
Con este enfoque, primero debe leer los datos del archivo \pgfplotstableread
y almacenarlos en alguna variable. Luego puede calcular el número de filas y recorrer las filas usando \foreach
. Con la ayuda de \pgfplotstablegetelem
, puede obtener la coordenada relevante de los datos de la tabla.
Simplifiqué algunas partes de tu código.
\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}
Una solución usando PGFplots podría ser la siguiente:
\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}