Ich möchte die Funktion x*y/(x^2+y^2)^2 plotten, die am Nullpunkt gegen unendlich geht. Daher möchte ich die Werte dort begrenzen, und mache das hier mit restrict z to domain:

Open in writeLaTeX
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps} 
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
      restrict z to domain = -12:12,
      colormap/autumn,
      view/el = 45
    ]
    \addplot3[
      surf,
      samples  =       70,
      domain   = -0.5:0.5,
      domain y = -0.5:0.5,
    ]
    {x*y/(x^2+y^2)^2};
  \end{axis}
\end{tikzpicture}
\end{document}

Jedoch habe ich dann einen gezackten Rand:

Grafik der Funktion

Ich möchte ihn gern gerade abgeschnitten haben, damit es vernünftig aussieht, etwas so (mit Wolfram Alpha):

Plot mit Wolfram Alpha

Ideen, ggf. in Kombination:

  • restrict z to domain*
  • Grenzlinie plotten mit zusätzlichem Plot und etwa restrict expr to domain={rawz}{19.99:20.01}
  • z filter
  • ein dritter Plot (zwischendurch) ohne Grid, mit restrict oder z filter für ein homogenes Plateau
  • ein contour plot für das Plateau
  • die Plateau-Grenze mit z=20 machen durch parametrisierten Plot in x und y, evtl. mit fill

Kam bei den Experimenten noch nix schönes raus.

Wie kriege ich die Ränder gerade und den Plot ansehnlich, ähnlich wie im zweiten Plot?

gefragt 16 Jul '14, 15:33

stefan's gravatar image

stefan ♦♦
5.8k12134
Akzeptiert: 28%


Das clippen scheint int diesem Beispiel mit restrict z to domain* gut zu klappen.

Zum Zeichnen einer praeziseren Aussenkante kannst Du einen contour plot hinterherschieben, der nur das level 12 hat. Den kannst Du entweder nur zeichnen oder fuellen; hier ist es mit fuellung:

alt text

Open in writeLaTeX
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps} 
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
      colormap/autumn,
      view/el = 45
    ]
    \addplot3[
      restrict z to domain* = -12:12,
      surf,
      samples  =       70,
      domain   = -0.5:0.5,
      domain y = -0.5:0.5,
    ]
    {x*y/(x^2+y^2)^2};

    % the contour plot handler can *draw* a contour line, but it cannot fill:
    \addplot3[
      contour gnuplot={
        levels={12},
        labels=false,
      },
      samples  =       70,
      domain   = -0.5:0.5,
      domain y = -0.5:0.5,
    ]
    {x*y/(x^2+y^2)^2};

    % now we fill the contour:
    \addplot3[
        % 1000 is always the last entry in the colormap, i.e. point
        % meta max:
        /utils/exec={\pgfplotscolormapdefinemappedcolor{1000}},
        draw=none,
        fill=mapped color] 
        file {P_contourtmp0.table};
  \end{axis}
\end{tikzpicture}
\end{document}

Du kannst auch das fuellen weglassen und contour gnuplot={..., draw color=black} oder so schreiben, dann haettest Du lediglich eine schwarze Umrandung.

Permanenter link

beantwortet 18 Jul '14, 09:02

cfeuersaenger's gravatar image

cfeuersaenger
97723

@cfeuersaenger Hervorragend, vielen Dank! Hab das gleich als Anlass zu einem Blogpost genommen: 3D-Plots beschneiden.

(19 Jul '14, 07:55) stefan ♦♦
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
×160
×21
×19

Frage gestellt: 16 Jul '14, 15:33

Frage wurde angeschaut: 3,577 Mal

Zuletzt aktualisiert: 19 Jul '14, 07:55