Ich habe einen Surface-Plot der Funktion z = x^2+y^2 und möchte den Raum unterhalb davon füllen, so dass das Bild einen soliden dreidimensionalen Körper darstellt.

Wie kann man das am besten umsetzen?

Ich werde einen ersten Vorschlag als Antwort posten und freue mich über Verbesserungen und Alternativen. Bei weiteren Vorschlägen kann sehr gern eine andere Funktion genommen werden.

Minimalbeispiel:

\documentclass[border=15pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
      domain = -4:4,
      zmax   = 50,
      colormap/bone,
      grid
    ]
    \addplot3 [surf] {x^2+y^2};
  \end{axis}
\end{tikzpicture}
\end{document}

3D Oberflächen-Plot

gefragt 20 Aug '14, 11:04

stefan's gravatar image

stefan ♦♦
18.3k163148
Akzeptiert-Rate: 49%

bearbeitet 13 Sep '21, 10:07


  • Zunächst bestimme ich die "Randkurven", die sich für x=0 und y=0 ergeben, und plotte sie.
  • Die "Unterkanten" werden geplottet, diese und die Randkurven kriegen einen Namen mit name path.
  • Mit der fillbetween library, die pgfplots 1.10 oder neuer voraussetzt, fülle ich zwischen Randkurven und Unterkanten und erhalte so die Randflächen des darzustellenden Volumens.
  • Ich definiere einen pgf Layer für den Hintergrund und setze die ursprüngliche Fläche darauf, damit die Vorderseiten auf dem Haupt-Layer die Unterseite der Funktion verdecken. Nachteil: die Achsen werden darüber gezeichnet. Daher lasse ich sie hier weg. Man könnte das vmtl. mit 3 Layern lösen oder einer bestimmten Plotabfolge, statt Layer zu benutzen.
  • Eine Schattierung für die Randflächen verstärkt den räumlichen Eindruck.
Open in writeLaTeX
\documentclass[border=15pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps,fillbetween}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}
  \pgfdeclarelayer{pre main}
  \pgfsetlayers{pre main,main}
  \begin{axis}[
      hide axis,
      domain = -4:4,
      zmax = 50,
      colormap/bone
    ]
    \begin{pgfonlayer}{pre main}
      \addplot3 [surf] {x^2+y^2};
    \end{pgfonlayer}
    \addplot3 [name path = xline, draw = none] (x,-4,0);
    \addplot3 [name path = yline, draw = none] (4,y,0);
    \addplot3 [name path = xcurve, y domain = 0:0, draw = none]
      (x,-4,{x^2+16});
    \addplot3 [name path = ycurve, y domain = 0:0, draw = none]
      (4,x,{16+x^2});
    \addplot [left color = black, right color = black!50, draw = none]
      fill between[of = xcurve and xline];
    \addplot [left color = black!50, right color = black, draw = none]
      fill between[of = yline and ycurve, reverse = true];
  \end{axis}
\end{tikzpicture}
\end{document}

Gefülltes Volumen unter 3d-Plot

Permanenter link

beantwortet 20 Aug '14, 11:18

stefan's gravatar image

stefan ♦♦
18.3k163148
Akzeptiert-Rate: 49%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×298
×20

gestellte Frage: 20 Aug '14, 11:04

Frage wurde gesehen: 12,985 Mal

zuletzt geändert: 20 Aug '14, 11:18