Erstellen von Histogrammen mit Rectangles und PolyCollections #

Verwenden eines Pfadpatches zum Zeichnen von Rechtecken. Die Technik der Verwendung vieler Rectangle-Instanzen oder die schnellere Methode der Verwendung von PolyCollections wurden implementiert, bevor wir die richtigen Pfade mit moveto/lineto, closepoly usw. in mpl hatten. Jetzt, da wir sie haben, können wir Sammlungen von regelmäßig geformten Objekten mit homogenen Eigenschaften effizienter mit einer PathCollection zeichnen. Dieses Beispiel erstellt ein Histogramm – es ist arbeitsintensiver, die Vertex-Arrays am Anfang einzurichten, aber es sollte viel schneller für eine große Anzahl von Objekten sein.

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()
Histogrammpfad

Es sollte beachtet werden, dass wir, anstatt ein dreidimensionales Array zu erstellen und zu verwenden make_compound_path_from_polys, den zusammengesetzten Pfad auch direkt erstellen könnten, indem wir Scheitelpunkte und Codes verwenden, wie unten gezeigt

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)

Galerie generiert von Sphinx-Gallery