Package: matplotx
Some useful extensions forMatplotlib.This package includes some useful or beautiful extensions toMatplotlib. Most of those features could be in
Matplotlib itself, but I haven't had time to PR yet. If you're eager, let me
know and I'll support the effort.Install withpipinstallmatplotx[all]and use in Python withimportmatplotxSee below for what matplotx can do.Clean line plots (dufte)matplotlibmatplotx.styles.dufte,matplotx.ylabel_top,matplotx.line_labelsmatplotx.styles.duftify(matplotx.styles.dracula)The middle plot is created withimportmatplotlib.pyplotaspltimportmatplotximportnumpyasnp# create datarng=np.random.default_rng(0)offsets=[1.0,1.50,1.60]labels=["no balancing","CRV-27","CRV-27*"]x0=np.linspace(0.0,3.0,100)y=[offset*x0/(x0+1)+0.1*rng.random(len(x0))foroffsetinoffsets]# plotwithplt.style.context(matplotx.styles.dufte):foryy,labelinzip(y,labels):plt.plot(x0,yy,label=label)plt.xlabel("distance [m]")matplotx.ylabel_top("voltage [V]")# move ylabel to the top, rotatematplotx.line_labels()# line labels to the rightplt.show()The three matplotx ingredients are:matplotx.styles.dufte: A minimalistic stylematplotx.ylabel_top: Rotate and move the the y-labelmatplotx.line_labels: Show line labels to the right, with the line colorYou can also "duftify" any other style (see below) withmatplotx.styles.duftify(matplotx.styles.dracula)Further reading and other styles:Remove to improve: data-ink ratioCereblog,Remove to improve: Line Graph EditionShow the Data - Maximize the Data Ink RatioRandal S. Olson's blog entryprettyplotlibWikipedia: ChartjunkClean bar plotsmatplotlibduftedufte withmatplotx.show_bar_values()The right plot is created withimportmatplotlib.pyplotaspltimportmatplotxlabels=["Australia","Brazil","China","Germany","Mexico","United\nStates"]vals=[21.65,24.5,6.95,8.40,21.00,8.55]xpos=range(len(vals))withplt.style.context(matplotx.styles.dufte_bar):plt.bar(xpos,vals)plt.xticks(xpos,labels)matplotx.show_bar_values("{:.2f}")plt.title("average temperature [°C]")plt.show()The two matplotx ingredients are:matplotx.styles.dufte_bar: A minimalistic style for bar plotsmatplotx.show_bar_values: Show bar values directly at the barsExtra stylesmatplotx contains numerous extra color schemes, e.g.,Dracula,Nord,gruvbox, andSolarized,the revised Tableau colors.importmatplotlib.pyplotaspltimportmatplotx# use everywhere:plt.style.use(matplotx.styles.dracula)# use with context:withplt.style.context(matplotx.styles.dracula):passSeeherefor a
full list of extra stylesOther styles:John Garrett,Science PlotsDominik Haitz,Cyberpunk styleDominik Haitz,Matplotlib stylesheetsCarlos da Costa,The Grand Budapest HotelDanny Antaki,vaporwave aestheticsQuantumBlack Labs,QuantumBlackSmooth contoursplt.contourfmatplotx.contours()Sometimes, the sharp edges ofcontour[f]plots don't accurately represent the
smoothness of the function in question. Smooth contours,contours(), serves as a drop-in replacement.importmatplotlib.pyplotaspltimportmatplotxdefrosenbrock(x):return(1.0-x[0])**2+100.0*(x[1]-x[0]**2)**2im=matplotx.contours(rosenbrock,(-3.0,3.0,200),(-1.0,3.0,200),log_scaling=True,cmap="viridis",outline="white",)plt.gca().set_aspect("equal")plt.colorbar(im)plt.show()Contour plots for functions with discontinuitiesplt.contourmatplotx.contour(max_jump=1.0)Matplotlib has problems with contour plots of functions that have discontinuities. The
software has no way to tell discontinuities and very sharp, but continuous cliffs apart,
and contour lines will be drawn along the discontinuity.matplotx improves upon this by adding the parametermax_jump. If the difference between
two function values in the grid is larger thanmax_jump, a discontinuity is assumed
and no line is drawn. Similarly,min_jumpcan be used to highlight the discontinuity.As an example, take the functionimag(log(Z))for complex values Z. Matplotlib's
contour lines along the negative real axis are wrong.importmatplotlib.pyplotaspltimportnumpyasnpimportmatplotxx=np.linspace(-2.0,2.0,100)y=np.linspace(-2.0,2.0,100)X,Y=np.meshgrid(x,y)Z=X+1j*Yvals=np.imag(np.log(Z))# plt.contour(X, Y, vals, levels=[-2.0, -1.0, 0.0, 1.0, 2.0])  # draws wrong linesmatplotx.contour(X,Y,vals,levels=[-2.0,-1.0,0.0,1.0,2.0],max_jump=1.0)matplotx.discontour(X,Y,vals,min_jump=1.0,linestyle=":",color="r")plt.gca().set_aspect("equal")plt.show()Relevant discussions:matplotlib/issues/21348spy plots (betterspy)Show sparsity patterns of sparse matrices or write them to image files.Example:importmatplotxfromscipyimportsparseA=sparse.rand(20,20,density=0.1)# show the matrixplt=matplotx.spy(A,# border_width=2,# border_color="red",# colormap="viridis")plt.show()# or save it as pngmatplotx.spy(A,filename="out.png")no colormapviridisThere is a command-line tool that can be used to showmatrix-marketorHarwell-Boeingfiles:matplotx spy msc00726.mtx [out.png]Seematplotx spy -hfor all options.LicenseThis software is published under theMIT license.