Iterating on @FrédéricC's answer...

In the following we

- increase the number of plot points to improve the resolution of the image,
- use
`RDF`

and `CDF`

: "real double field", "complex double field" -- floating-point real and complex numbers, - avoid Sage's "symbolic variables" and "symbolic ring" throughout.

Doing this, the spike however reaches higher and higher values, so it becomes
necessary to truncate the z values.

Pick a colormap and define $\tau = 2\pi$.

```
sage: cm = colormaps.jet
sage: tau = 2 * RDF.pi()
```

Define `f`

:

```
sage: def f(x, y):
....: z = CDF(x, y)
....: return (z - 2) / (z + 3)**2
```

Define `f_abs`

(modulus of `f`

):

```
sage: f_abs = lambda x, y: f(x, y).abs()
```

Define truncation:

```
sage: trunc = lambda x, t: x if x.abs() < t else RDF.nan()
```

Pick a bound to truncate:

```
sage: zbound = 8
```

Define `f_abs_trunc`

as `f_abs`

truncated to the chosen bound.

```
sage: f_abs_trunc = lambda x, y: trunc(f_abs(x, y), zbound)
```

Define `f_arg_color`

as the coloring for the argument of f:

```
sage: f_arg_color = lambda x, y: f(x, y).arg() / tau + RDF(0.5)
```

Compute the plot:

```
sage: p = plot3d(f_abs_trunc, (-4, 4), (-4, 4), color=(f_arg_color, cm), plot_points=200)
```

Show the plot (choose `viewer='threejs'`

or `viewer='jmol'`

or `viewer='tachyon'`

):

```
sage: p.show(viewer='threejs')
```

Increasing `plot_points`

further makes a nicer plot while also increasing the time to show the plot.
Try for example `plot_points=400`

or even `plot_points=800`

.

One can also increase `zbound`

to see more of the spike (try for example `zbound=1e2`

or `zbound=2e5`

).
Or plot `f_abs`

instead of `f_abs_trunc`

to avoid truncation altogether.