외부 좌표 파일에서 3D로 부드러운 곡선 그리기

외부 좌표 파일에서 3D로 부드러운 곡선 그리기

"xz.dat"와 같은 파일에 저장된 이전에 계산된 좌표에서 3D 플롯을 만들고 싶습니다.

여기에는 다음과 같은 데이터가 포함됩니다.

x z
0.5 0
0.54 0.01
0.58 0.01
0.62 0.02
0.66 0.03
0.7 0.03
0.74 0.04
0.78 0.05
etc.

최소 작업 예:

\documentclass{article}

\usepackage{datatool}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[x={(210:3cm)},y={(330:3cm)},z={(90:3cm)}]
\draw (0,0,0)--(1,0,0);
\draw (0,0,0)--(0,1,0);
\draw (0,0,0)--(0,0,3);
\DTLsetseparator{ }
\DTLloaddb[noheader=false]{coordinates}{./xz.dat}
\DTLforeach*{coordinates}{\x=x,\z=z}{\filldraw (\x,0,\z) circle (0.02);}
\end{tikzpicture}

\end{document}

결과는 다음과 같습니다.

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

보기 흉하게 찌그러진 점 대신 부드러운 선을 사용하여 연속적인 좌표를 연결할 수 있습니까?

"플롯 파일"을 사용하여 이를 수행하는 방법을 알고 있지만 이는 2D 플롯에만 작동합니다.

답변1

2차원 좌표만 있는 경우에도 파일을 3D로 플롯하는 방법에는 여러 가지가 있습니다. 한 가지 방법은 y=0. 물론 손으로 할 필요는 없습니다.

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{filecontents}
\begin{filecontents*}{data2.dat}
x z
0.5 0
0.54 0.01
0.58 0.01
0.62 0.02
0.66 0.03
0.7 0.03
0.74 0.04
0.78 0.05
\end{filecontents*}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=1.16}
\pgfplotstableset{
    create on use/new y/.style={
        create col/expr={0}}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ymin=-0.2,ymax=1]
\addplot3[no marks,smooth] table[x=x,y=new y,z=z] {data2.dat};
\end{axis}
\end{tikzpicture}
\end{document}

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

물론 당신은~할 수 있다또한 사용 중인 프레임워크에 부드러운 플롯을 추가하세요.

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{filecontents}
\begin{filecontents*}{xz.dat}
x z
0.5 0
0.54 0.01
0.58 0.01
0.62 0.02
0.66 0.03
0.7 0.03
0.74 0.04
0.78 0.05
\end{filecontents*}
\usepackage{datatool}
\newcounter{mycoord}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[x={(-25.98mm,-15mm)},y={(25.98mm,-15mm)},z={(0,30mm)}]
\draw (0,0,0)--(1,0,0);
\draw (0,0,0)--(0,1,0);
\draw (0,0,0)--(0,0,3);
\DTLsetseparator{ }
\DTLloaddb[noheader=false]{coordinates}{./xz.dat}
\DTLforeach*{coordinates}{\x=x,\z=z}{\stepcounter{mycoord}
\filldraw (\x,0,\z) coordinate(X-\themycoord) circle (0.02);}
\draw plot[smooth,samples at={1,...,\themycoord},variable=\x] (X-\x);
\end{tikzpicture}

\end{document}

사용당신의 데이터 파일(그리고 총알을 제거하면) 결과가 나옵니다

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{filecontents}
\usepackage{datatool}
\newcounter{mycoord}
\usepackage{tikz}
%\usetikzlibrary{decorations.markings}
\begin{document}

\begin{tikzpicture}[x={(-25.98mm,-15mm)},y={(25.98mm,-15mm)},z={(0,30mm)}]
\draw (0,0,0)--(1,0,0);
\draw (0,0,0)--(0,1,0);
\draw (0,0,0)--(0,0,3);
\DTLsetseparator{ }
\DTLloaddb[noheader=false]{coordinates}{./xz.dat}
\DTLforeach*{coordinates}{\x=x,\z=z}{\stepcounter{mycoord}
\path (\x,0,\z) coordinate(X-\themycoord);}
\draw plot[smooth,tension=0.5,samples at={1,...,\themycoord},variable=\x] (X-\x);
\end{tikzpicture}

\end{document}

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

작은 흔들림은 평활화가 아닌 데이터에서 비롯됩니다.

관련 정보