Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

My code:

Plot3D[{(2*x*y)/(x^2 + y^2)}, {x, -2, 2}, {y, -2, 2}]


enter image description here

And now I can export this to STL by using the export STL command, however, when I try to print this on the MakerBot 3D printer there is a problem because the width of the graph is too thin. I need to increase the thickness of the width of the graph, can I do this in Mathematica?

share|improve this question
Try with RegionPlot3D[] – Dr. belisarius Nov 24 '13 at 1:49
I'm confused by your terminology. What do mean by "width" and "thickness"? I have no idea what dimension "width" refers to, and as for "thickness", a surface it infinitesimally thin by definition. – m_goldberg Nov 24 '13 at 3:49
Here's an article about 3D printing from Mathematica... there are some tricks to take note of. – bill s Nov 24 '13 at 4:20
up vote 11 down vote accepted

Try this:

Plot3D[{(2*x*y)/(x^2 + y^2)}, {x, -2, 2}, {y, -2, 2}, 
 PlotStyle -> Thickness[1]]


And remember to watch your units - if you print in millimetres, 1 is a bit small...

For Version 10

The above no longer works in Mathematica version 10. Instead of Plot3D, use ParametricPlot3D:

ParametricPlot3D[{x, y, (2 x y)/(x^2 + y^2)}, {x, -2, 2}, {y, -2, 2},
 PlotStyle -> Thickness[1]]

still thick

share|improve this answer
This may be version 9 and later, not sure... – cormullion Nov 24 '13 at 8:31
What about AbsoluteThickness? edit: it seems it's not supported. – shrx Nov 24 '13 at 11:54
@shrx AbsoluteThickness doesn't appear to work for this application... – cormullion Nov 24 '13 at 12:01
+1. Well, wasn't that easy? :) – Michael E2 Nov 24 '13 at 12:53
@MichaelE2 :) our answers reflect our contrasting math skills... – cormullion Nov 24 '13 at 12:55

In version 10.0.0 the PlotStyle -> Thickness method shown by cormullion does not appear to work. Instead we can use the undocumented Extrusion option:

ContourPlot3D[x y z == 0.05, {x, -1, 1}, {y, -1, 1}, {z, -1, 1}, Extrusion -> 0.1]

enter image description here

share|improve this answer
Aaaaaaagh. They're supposed to add new features for new releases, not remove ones.. – cormullion Jul 16 '14 at 16:36
Which works in ContourPlot3D even though it's Red so unrecognized as an option but doesn't work and is rejected by ListContourPlot3D!!! Echoing Aaaaaaaagh. V. 10.1. – Ymareth Apr 3 '15 at 18:23
@Ymareth Seems Extrusion (still undocumented) works now also in ListContourPlot3D since v10.2. See this post – SquareOne Oct 29 '15 at 10:49

You can take advantage of the VertexNormals that Plot computes to translate the surface a little to each side. I'm not sure just what is required for good STL output. I put a polygonal side all around the two surfaces. The VertexNormals are wrong for the sides, so I commented them out for the image presented.

The thickness is controlled by the parameter thickness.

With[{plot = Plot3D[{(2*x*y)/(x^2 + y^2)}, {x, -2, 2}, {y, -2, 2}, Mesh -> None]}, 
 With[{n0 = VertexNormals /. Cases[plot, HoldPattern[VertexNormals -> _], Infinity],
       thickness = 0.1}, 
  With[{pts = First @
               GraphicsComplex[p_, e__] :> Flatten[{p - thickness n0, p + thickness n0}, 1],
        vn = First @ Cases[plot, HoldPattern[VertexNormals -> v_] :> Join[v, v], Infinity]},
      Cases[plot, Polygon[p_] :> Polygon@Join[p, p + Length[pts]/2], Infinity],
       Line[p_] :> Polygon[Join[#, Reverse@# + Length[pts]/2] & /@ Partition[p, 2, 1]],
     (*, VertexNormals -> vn *)
    PlotRange -> All,


share|improve this answer
This was a very detailed answer, and I appreciate you taking the time to write it. I chose the other only out of simplicity but I am sure your answer may have future benefits, thanks. – ratman2050 Nov 24 '13 at 23:22
Hey, no problem. The other way is definitely superior based on simplicity. Also, the other answer does what this one does and more. – Michael E2 Nov 24 '13 at 23:26

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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