Note

Go to the endto download the full example code.

Shaded & power normalized rendering#

The Mandelbrot set rendering can be improved by using a normalized recountassociated with a power normalized colormap (gamma=0.3). Rendering can befurther enhanced thanks to shading.

Themaxiter gives the precision of the computation.maxiter=200 shouldtake a few seconds on most modern laptops.

mandelbrot
importnumpyasnpdefmandelbrot_set(xmin,xmax,ymin,ymax,xn,yn,maxiter,horizon=2.0):X=np.linspace(xmin,xmax,xn).astype(np.float32)Y=np.linspace(ymin,ymax,yn).astype(np.float32)C=X+Y[:,None]*1jN=np.zeros_like(C,dtype=int)Z=np.zeros_like(C)forninrange(maxiter):I=abs(Z)<horizonN[I]=nZ[I]=Z[I]**2+C[I]N[N==maxiter-1]=0returnZ,Nif__name__=='__main__':importtimeimportmatplotlib.pyplotaspltimportmatplotlibfrommatplotlibimportcolorsxmin,xmax,xn=-2.25,+0.75,3000//2ymin,ymax,yn=-1.25,+1.25,2500//2maxiter=200horizon=2.0**40log_horizon=np.log2(np.log(horizon))Z,N=mandelbrot_set(xmin,xmax,ymin,ymax,xn,yn,maxiter,horizon)# Normalized recount as explained in:# https://linas.org/art-gallery/escape/smooth.html# https://web.archive.org/web/20160331171238/https://www.ibm.com/developerworks/community/blogs/jfp/entry/My_Christmas_Gift?lang=en# This line will generate warnings for null values, but it is faster to# process them afterwards using the nan_to_numwithnp.errstate(invalid='ignore'):M=np.nan_to_num(N+1-np.log2(np.log(abs(Z)))+log_horizon)dpi=72width=10height=10*yn/xnfig=plt.figure(figsize=(width,height),dpi=dpi)ax=fig.add_axes((0,0,1,1),frameon=False,aspect=1)# Shaded renderinglight=colors.LightSource(azdeg=315,altdeg=10)M=light.shade(M,cmap=plt.colormaps["hot"],vert_exag=1.5,norm=colors.PowerNorm(0.3),blend_mode='hsv')ax.imshow(M,extent=[xmin,xmax,ymin,ymax],interpolation="bicubic")ax.set_xticks([])ax.set_yticks([])# Some advertisement for matplotlibyear=time.strftime("%Y")text=("The Mandelbrot fractal set\n""Rendered with matplotlib%s,%s - https://matplotlib.org"%(matplotlib.__version__,year))ax.text(xmin+.025,ymin+.025,text,color="white",fontsize=12,alpha=0.5)plt.show()

Total running time of the script: (0 minutes 5.664 seconds)

Gallery generated by Sphinx-Gallery