Ask Your Question

Lazza's profile - activity

2020-04-23 16:32:20 -0600 received badge  Nice Question (source)
2019-04-14 06:19:48 -0600 received badge  Famous Question (source)
2017-09-04 15:26:24 -0600 received badge  Notable Question (source)
2017-01-11 14:59:06 -0600 received badge  Popular Question (source)
2016-09-27 07:43:08 -0600 received badge  Supporter (source)
2016-09-27 07:42:24 -0600 received badge  Editor (source)
2016-09-19 15:30:26 -0600 received badge  Student (source)
2016-09-18 15:02:42 -0600 asked a question How do I plot a function undefined in some areas?

I am trying to plot f(x,z) which is undefined in some areas. When I try to plot some other function, I can get it to work easily because Sage restricts the plot to the area where the function is real. E.g.:

plot3d(sqrt(1-x^2-y^2), (x,-5,5), (y,-5,5))

The border is a bit weird, but it works. I cannot get a working plot with my code, however. I also tried to wrap the function with a try ... except statement but I don't know what to return:

var("x y z")
def wrap(exp, a, b):
        return exp(x=a, z=b)
    except ValueError:
        return None

plot3d(lambda x,y: wrap(f, x, y), (x, -t, t), (y, -t, t)).show(aspect_ratio=1)

My function is f and it contains variables x and z.

2016-06-28 08:44:17 -0600 commented answer Customizing the wireframe / strides of a 3D plot

Thanks for your answer! Unfortunately I cannot upvote it yet. I have tweaked it a bit, obtaining this: There is still the problem that those are actually "slices" of a 3D object and therefore have one side which is a line and one side which is thick (depending on the width). I will try to figure out how to draw just lines for them.

2016-06-26 12:00:37 -0600 commented question Customizing the wireframe / strides of a 3D plot

Sorry for the ugly formatting but the website wouldn't allow me to post the Q until I dropped all links. Someone with enough rep please fix the links and images. Thank you.

2016-06-26 12:00:36 -0600 asked a question Customizing the wireframe / strides of a 3D plot

I am experimenting with 3D plotting to see how I can customize the output. In particular, I am trying to obtain something more similar to how Mathematica or Wolfram Alpha do things.

For example, I plotted Taubin's heart surface:

$$ \left(x^2+\frac{9 y^2}{4} + z^2 - 1\right)^3-x^2 z^3 - \frac{9 y^2 z^3}{80} = 0 $$

Using the following code:

var("x y z")

f = (x^2 + 2.25*y^2 + z^2 - 1)^3 - (x^2)*(z^3) - 0.1125*(y^2)*(z^3)
xint = (x, -1.5, 1.5)
yint = (y, -1.5, 1.5)
zint = (z, -1.5, 1.5)

my_plot = implicit_plot3d(f, xint, yint, zint, opacity=.7, mesh=2)

The mesh corresponds to the triangulation of points that Sage performs on the data calculated with implicit_plot3d. However, Wolfram Alpha gives a different result (, because it does not use all the edges of the triangulation:

What I think they are doing is they are using a high number of points to draw the surface, however they are "slicing" the object with planes parallel to the three axes (at fixed distances) to draw the contours.

How can I replicate these lines?

Matplotlib calls them "strides" as documented for Axes3d.plot_surface( My final goal is exporting 3D vector drawings which I managed to do with Matplotlib thanks to the numpy-stlpackage (

from mpl_toolkits import mplot3d
from matplotlib import pyplot

# Create a new plot
figure = pyplot.figure()
axes = mplot3d.Axes3D(figure)

# Load the STL files and add the vectors to the plot
your_mesh = mesh.Mesh.from_file('/tmp/test.stl')

# Auto scale to the mesh size
scale = your_mesh.points.flatten(-1)
axes.auto_scale_xyz(scale, scale, scale)

# Show the plot to the screen

In this case the presence of too much grid lines looks even worse:

2012-12-18 22:56:21 -0600 commented answer A place to advertise Sage

I agree the font is the "problem". If you post the SVG, I could try to tweak it a bit. :)