8

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!!

  • 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. – marmot Feb 24 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 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. – marmot Feb 24 at 7:11
  • 1
    I need to sleep so I will just post some 1d plot. – marmot Feb 24 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 at 7:45
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

  • 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! – The old JouleV Feb 27 at 9:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.