tikz를 사용하여 txt 파일에서 노드를 그리는 방법

tikz를 사용하여 txt 파일에서 노드를 그리는 방법

기본적으로 저는 tikzpicture를 가지고 있고 이 그림 안에 36개의 노드를 포함하고 싶습니다. 현재 내가 아는 유일한 방법은 이를 포함하는 것입니다.

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

나는 36개 노드 모두에 대해 이 작업을 수행하고 싶지 않습니다. txt 파일에 36개 노드의 좌표가 있는데 자동으로 읽어서 그리는 방법이 있나요? 점을 서로 연결하고 싶지 않으므로 경로나 선 그리기가 아닙니다.

이것은 txt 파일에 포인트가 어떻게 기록되는지 보여주는 예입니다.

0 .1

.1 0

.5 0.5

0.4 .9 등

이것저것 해봤는데 안되더라구요

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

이것이 내가 그림을 생성하는 방법입니다.

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

답변1

파일에서 데이터를 읽는 기능을 제공하는 PGFplot의 기능을 사용하고 싶지 않은 경우 패키지에서 제공하는 메커니즘을 사용할 수 있습니다 pgfplotstable. pgfplotstable로드 pgfplotspgfplots로드 되므로 tikz이러한 패키지 중 하나만 로드하게 됩니다.

이 접근 방식을 사용하려면 먼저 파일에서 데이터를 읽고 \pgfplotstableread일부 변수에 저장해야 합니다. 그런 다음 행 수를 계산하고 를 사용하여 행을 반복할 수 있습니다 \foreach. 의 도움으로 \pgfplotstablegetelem테이블 데이터에서 관련 좌표를 가져올 수 있습니다.

코드의 일부를 단순화했습니다.

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

여기에 이미지 설명을 입력하세요


PGFplot을 사용하는 솔루션은 다음과 같습니다.

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

여기에 이미지 설명을 입력하세요

관련 정보