"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}
작은 흔들림은 평활화가 아닌 데이터에서 비롯됩니다.