Wie man dieses Pegelkurvendiagramm genau so macht, wie es ist

Wie man dieses Pegelkurvendiagramm genau so macht, wie es ist

Bildbeschreibung hier eingeben

In diesem Beitrag,

Zusammenhang zwischen Niveaukurven und Horizontalspuren

es gibt bereits ein sehr schönes Bild, aber es fehlen noch ein paar Details. Und ich kann es nicht realisieren.

Antwort1

Manche Dinge in solchen Plots sind möglicherweise konzeptionell interessant, und Antworten können anderen Benutzern Informationen liefern, die bis zu einem gewissen Grad abstrakt und daher nützlich sind. Andere Teile sind einfach nur langweilig. Um den Plot genau so umzusetzen, wie Sie es möchten, sollten Sie meiner Meinung nach wirklich in eine Phase gelangen, in der Sie die Grundlagen verstehen, und es dann einfach tun.

Im Folgenden werden dem Beitrag, auf den Sie verweisen, einige Details hinzugefügt. Ich hoffe, dass Ihnen dies dabei hilft, genau das zu erreichen, was Sie möchten.

\documentclass[tikz,border=3mm]{standalone}
\makeatletter
\pgfmathdeclarefunction{phicrit}{0}{%
\begingroup%
\pgfmathparse{atan2(\pgf@xx,\pgf@yx)}%
\pgfmathsmuggle\pgfmathresult\endgroup%
}%
\makeatother
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=15cm,
    axis lines=middle,ymin=0,xmin=0,zmin=0,zmax=50,smooth,
    colormap={irk}{color=(cyan!50) color=(cyan)},point meta=-z-x-y,view={115}{20},
    xtick=\empty,ytick=\empty,ztick={0,45},
    declare function={f(\x)=30+15*cos(\x*36);}]
  \pgfplotsinvokeforeach{20,25,30,35,40,45}{%
  \draw[red] (7,7,0) circle[radius={acos((#1-30)/15)/36}];
  \path ({7+cos(-50+5*#1)*acos((#1-30)/15)/36},{7+sin(-50+5*#1)*acos((#1-30)/15)/36},0)
   node[inner sep=0.5pt,fill=white,font=\tiny] {$k=#1$};
  \draw[dashed] (7,{7-acos((#1-30)/15)/36},0) --
  (7,{7-acos((#1-30)/15)/36},#1) (7,{7+acos((#1-30)/15)/36},0) --
  (7,{7+acos((#1-30)/15)/36},#1);
  \addplot3[domain=phicrit+30-#1/3:phicrit+15+180-#1/3,color=cyan,samples y=0,smooth,
    dashed]  
  ({7+cos(x)*acos((#1-30)/15)/36},{7+sin(x)*acos((#1-30)/15)/36},{#1});
  }
  %
  \addplot3[domain=-5:5,color=gray,samples y=0]  ({7},{7+x},{f(x)});
  %
  \addplot3[surf,shader=interp,domain y=0:360,domain=0:5,z buffer=sort,
    opacity=0.8] 
   ({7+x*cos(y)},{7+x*sin(y)},{f(x)});
  \pgfplotsinvokeforeach{20,25,30,35,40,45}{% 
  \addplot3[domain=phicrit+30-#1/3:phicrit-30-180+45-#1/3,color=cyan,samples y=0,smooth]  
  ({7+cos(x)*acos((#1-30)/15)/36},{7+sin(x)*acos((#1-30)/15)/36},{#1});
  } 
\end{axis}
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen