Costruire istogrammi usando Rectangles e PolyCollections #

Utilizzo di una patch di percorso per disegnare rettangoli. La tecnica di utilizzare molte istanze di Rectangle, o il metodo più rapido di utilizzo di PolyCollections, è stata implementata prima che avessimo percorsi appropriati con moveto/lineto, closepoly ecc. in mpl. Ora che li abbiamo, possiamo disegnare raccolte di oggetti di forma regolare con proprietà omogenee in modo più efficiente con un PathCollection. Questo esempio crea un istogramma: è più laborioso impostare gli array di vertici all'inizio, ma dovrebbe essere molto più veloce per un gran numero di oggetti.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.path as path

fig, ax = plt.subplots()

# Fixing random state for reproducibility
np.random.seed(19680801)


# histogram our data with numpy

data = np.random.randn(1000)
n, bins = np.histogram(data, 50)

# get the corners of the rectangles for the histogram
left = bins[:-1]
right = bins[1:]
bottom = np.zeros(len(left))
top = bottom + n


# we need a (numrects x numsides x 2) numpy array for the path helper
# function to build a compound path
XY = np.array([[left, left, right, right], [bottom, top, top, bottom]]).T

# get the Path object
barpath = path.Path.make_compound_path_from_polys(XY)

# make a patch out of it
patch = patches.PathPatch(barpath)
ax.add_patch(patch)

# update the view limits
ax.set_xlim(left[0], right[-1])
ax.set_ylim(bottom.min(), top.max())

plt.show()
percorso dell'istogramma

Va notato che invece di creare un array tridimensionale e usare make_compound_path_from_polys, potremmo anche creare il percorso composto direttamente usando vertici e codici come mostrato di seguito

nrects = len(left)
nverts = nrects*(1+3+1)
verts = np.zeros((nverts, 2))
codes = np.ones(nverts, int) * path.Path.LINETO
codes[0::5] = path.Path.MOVETO
codes[4::5] = path.Path.CLOSEPOLY
verts[0::5, 0] = left
verts[0::5, 1] = bottom
verts[1::5, 0] = left
verts[1::5, 1] = top
verts[2::5, 0] = right
verts[2::5, 1] = top
verts[3::5, 0] = right
verts[3::5, 1] = bottom

barpath = path.Path(verts, codes)

Galleria generata da Sphinx-Gallery