Como desenhar nós de um arquivo txt usando tikz

Como desenhar nós de um arquivo txt usando tikz

Então, basicamente, eu tenho uma imagem tikz e gostaria de incluir 36 nós dentro desta imagem. atualmente, a única maneira que conheço de incluí-los é escrever

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

Eu realmente não quero fazer isso para todos os 36 nós. Eu tenho as coordenadas dos 36 nós em um arquivo txt, então existe uma maneira de lê-las e desenhá-las automaticamente? Não quero conectar os pontos entre si, portanto não é um caminho ou plotagem de linha.

este é um exemplo de como os pontos são escritos no arquivo txt

0,1

.1 0

0,5 0,5

0,4 ,9 e assim por diante

tentei fazer isso mas não funcionou

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

É assim que estou gerando minha imagem

\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}

Responder1

Se você não quiser empregar a funcionalidade do PGFplots que fornece funções para ler dados de arquivos, você pode usar a mecânica fornecida pelo pacote pgfplotstable. Observe que pgfplotstablecarrega pgfplotse pgfplotscarrega tikz, portanto você carrega apenas um desses pacotes.

Usando esta abordagem, primeiro você precisa ler os dados do arquivo \pgfplotstablereade armazená-los em alguma variável. Então você pode calcular o número de linhas e fazer um loop nas linhas usando \foreach. Com a ajuda de \pgfplotstablegetelem, você pode obter a coordenada relevante dos dados da tabela.

Simplifiquei algumas partes do seu 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}

insira a descrição da imagem aqui


Uma solução usando PGFplots poderia ser a seguinte:

\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}

insira a descrição da imagem aqui

informação relacionada