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:

Open in writeLaTeX
\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, 05:04

stefan's gravatar image

stefan ♦♦
5.8k12234
Akzeptiert: 28%


  • 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, 05:18

stefan's gravatar image

stefan ♦♦
5.8k12234

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×162
×19

Frage gestellt: 20 Aug '14, 05:04

Frage wurde angeschaut: 2,634 Mal

Zuletzt aktualisiert: 20 Aug '14, 05:18