7

I would like to plot the funtion xy/(x^2+2y^2) using PGFPlots. Here is what I want:

What I want

Please consider this MWE:

\documentclass{article}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper,margin=1in,footskip=0.25in]{geometry}
\usepackage{amssymb}
\usepackage{amsmath}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\pgfplotsset{soldot/.style={color=black,only marks,mark=*}}
\pgfplotsset{holdot/.style={color=red,fill=white,very thick,only marks,mark=*}}

\begin{document}
\begin{center}
    \begin{tikzpicture}[declare function={f(\x,\y)=(\x*\y)/(\x*\x+2*\y*\y);}]
        \begin{axis} [
                axis on top,
                axis equal image,
                axis lines=center,
                xlabel=$x$,
                ylabel=$y$,
                zlabel=$z$,
                zmin=-1,
                zmax=1,
                ztick={-1,0,0.33,1},
                zticklabels={$-1$,$0$,$1/3$,$1$},
                ticklabel style={font=\tiny},
                legend pos=outer north east,
                legend style={cells={align=left}},
                legend cell align={left},
                view={-135}{25},
            ]
            \addplot3[surf,mesh/ordering=y varies,shader=interp,domain=-1:1,domain y=-1:1,samples=61, samples y=61] {f(x,y)};;
        \end{axis}
    \end{tikzpicture}
\end{center}

\end{document}

What I have done

The MWE output has an incredible big zoom, so I would like to resize the plot but not using scale but another commands, like enlarge limits. However, all the results are in vain; I can not reproduce the visual appearance of what I want.

Thanks!!

10
  • 1
    Are you sure you want to plot the function in this way? If you use polar coordinates in the x-y plane, x=r cos(\phi) and y=r sin(\phi), you see that the function does not depend on r but only on the angle. This explains the behavior at 0, where the function is not well-defined. And otherwise the function depends only on one variable, so I am wondering if you would be better off if you plotted a function of one variable only, or at least use a different parametrization.
    – user121799
    Feb 24, 2019 at 7:02
  • @marmot please see the edit. The function has a "normal" behaviour when changing domain y=-1.2:1 to domain y=-1:1. If you want to use change of variables go ahead :). Do you know how to "enlarge" the axis without rescaling the entire function in order to make it a little more bigger?
    – manooooh
    Feb 24, 2019 at 7:05
  • 1
    Normally you can set width=15cm or something like this. Of course, with axis equal image, one needs to be a bit careful. What I meant to say is that the function is not well-defined at x=y=0 and otherwise only a function that depends on one variable, not on two. You see this actually rather well in the upper plot.
    – user121799
    Feb 24, 2019 at 7:11
  • 1
    I need to sleep so I will just post some 1d plot.
    – user121799
    Feb 24, 2019 at 7:28
  • 1
    Please do not alter the question that essentially by editing. It is much better to ask a new question.
    – TeXnician
    Feb 24, 2019 at 7:45

1 Answer 1

7
+50

Not an answer to the (LaTeX part of the) question. However, if you use polar coordinates in the x-y plane, x = r cos(ϕ) and y = r sin(ϕ), you see that the function does not depend on r but only on the angle. So away from the origin x = y = 0 all the information is already in a one-dimensional plot.

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{tikzpicture}[declare function={fan(\t)=-(sin(2*\t)/(-3 + cos(2*\t)));}]
\begin{axis}
 \addplot[domain=0:360,smooth,samples=101] {fan(x)};
\end{axis}
\end{tikzpicture}
\end{document}

enter image description here

And this yields a 3d smooth plot.

\documentclass[tikz,border=3.14mm]{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\pgfplotsset{soldot/.style={color=black,only marks,mark=*}}
\pgfplotsset{holdot/.style={color=red,fill=white,very thick,only marks,mark=*}}

\begin{document}
 \begin{tikzpicture}[declare function={f(\x,\y)=(\x*\y)/(\x*\x+2*\y*\y);
  fan(\t)=-(sin(2*\t)/(-3 + cos(2*\t)));}]
  \begin{axis} [width=18cm,
          axis on top,
          axis equal image,
          axis lines=center,
          xlabel=$x$,
          ylabel=$y$,
          zlabel=$z$,
          zmin=-1,
          zmax=1,
          ztick={-1,0,0.33,1},
          zticklabels={$-1$,$0$,$1/3$,$1$},
          ticklabel style={font=\tiny},
          legend pos=outer north east,
          legend style={cells={align=left}},
          legend cell align={left},
          view={-135}{25},
          data cs=polar,
      ]

      \addplot3[surf,mesh/ordering=y varies,shader=interp,domain=0:360,
      domain y=0:1,samples=61, samples y=21,
      z buffer=sort] { fan(x)};
      \addlegendentry{{$f(x,y)$}}
  \end{axis}
 \end{tikzpicture}
\end{document}

enter image description here

1
  • I edited your answer a bit (you can go to the revisions to see what I changed). If it is not good, be free to roll back to the previous version!
    – user156344
    Feb 27, 2019 at 9:32

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .