Observação
Clique aqui para baixar o código de exemplo completo
Construindo histogramas usando Rectangles e PolyCollections #
Usando um patch de caminho para desenhar retângulos. A técnica de usar muitas instâncias de Rectangle, ou o método mais rápido de usar PolyCollections, foi implementada antes de termos caminhos adequados com moveto/lineto, closepoly etc em mpl. Agora que os temos, podemos desenhar coleções de objetos de forma regular com propriedades homogêneas de forma mais eficiente com um PathCollection. Este exemplo faz um histograma - é mais trabalhoso configurar as matrizes de vértices no início, mas deve ser muito mais rápido para um grande número de objetos.
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()
Deve-se notar que ao invés de criar um array tridimensional e usar make_compound_path_from_polys
, poderíamos também criar o caminho composto diretamente usando vértices e códigos como mostrado abaixo
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)
Referências
O uso das seguintes funções, métodos, classes e módulos é mostrado neste exemplo:
Este exemplo mostra uma alternativa para