So far, limiting the z range in 3D plots from plot3d, parametric_plot or parametric_plot3d is missing.
Providing this feature is tracked at - Sage Trac ticket 31264 Allow setting zmin, zmax in plot3d and other 3d plots https://trac.sagemath.org/ticket/31264 Using implicit_plot3d can be a workaround, given an equation for the surface ...which is easy in the case of plot3d but usually not in the case of parametric_plot3d. To limit the x, y and z ranges in a parametric plot, we can alternatively use auxiliary functions which return their computed value when it is within bounds, and return "not a number" otherwise. Here is a way to do that for the plot in the question. We use cached functions to save computation time. ``` z = SR.var('z') E = EllipticCurve(QQ, [0, 0, 0, -1/4, 0]) wp = E.weierstrass_p().laurent_polynomial() wpp = derivative(wp, z) nan = float('nan') @cached_function def wpuv(u, v): return wp(u + i*v) @cached_function def xuv(u, v): return wpuv(u, v).real() @cached_function def yuv(u, v): return wpuv(u, v).imag() @cached_function def zuv(u, v): return wpp(u + i*v).imag() xmin, xmax = -1, 1 ymin, ymax = -1, 1 zmin, zmax = -1, 1 @cached_function def xok(u, v): return xmin < xuv(u, v) < xmax @cached_function def yok(u, v): return ymin < yuv(u, v) < ymax @cached_function def zok(u, v): return zmin < zuv(u, v) < zmax @cached_function def xyzok(u, v): return xok(u, v) and yok(u, v) and zok(u, v) @cached_function def xxuv(u, v): return xuv(u, v) if xyzok(u, v) else nan @cached_function def yyuv(u, v): return yuv(u, v) if xyzok(u, v) else nan @cached_function def zzuv(u, v): return zuv(u, v) if xyzok(u, v) else nan uu = (1e-3, 3.74) vv = (1e-3, 3.74) pp = parametric_plot3d pp([xxuv, yyuv, zzuv], uu, vv) ``` That's already an interesting view. To refine it, check which values of (u, v) give (x, y, z) within bounds: ``` good_uv_x = region_plot(xok, uu, vv) good_uv_y = region_plot(yok, uu, vv) good_uv_z = region_plot(zok, uu, vv) good_uv_xyz = region_plot(xyzok, uu, vv) good_uv = [good_uv_x, good_uv_y, good_uv_z, good_uv_xyz] graphics_array(good_uv, ncols=2) ``` This reveals that values of u and v beyond 3.2 are not so useful. Use a reduced range for u and v, and increase the number of plot points: ``` uu = (RDF(1e-3), RDF(3.2)) vv = (RDF(1e-3), RDF(3.2)) pp([xxuv, yyuv, zzuv], uu, vv, plot_points=129) ``` -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-support/11bc75df-cbc3-4e5e-b79e-13ed67b690f9n%40googlegroups.com.