¿Cómo puedo agregar texturas a mis barras y cuñas?

Estoy dibujando varios gráficos de barras y circulares utilizando matplotlib.pyplot.bar() y matplotlib.pyplot.pie() . En ambas funciones, puedo cambiar los colores de las barras y las cuñas.

Sin embargo, necesito imprimir estos gráficos en blanco y negro. Sería mucho más útil poder colocar texturas en las barras y las cuñas, de forma similar a la propiedad del marcador Line2D , que está disponible para dibujar líneas. ¿Puedo tal vez llenar las barras y las cuñas con estos marcadores de manera consistente? ¿O hay alguna otra manera de lograr algo así?

Con la bar() , puede usar directamente los sombreados (con algunos backends): http://matplotlib.org/examples/pylab_examples/hatch_demo.html : diagrama de barras con escotillas

Funciona agregando el argumento de hatch a su llamada a la bar() .


En cuanto a pie() , no tiene una palabra clave de hatch . En su lugar, puede obtener los parches de gráficos circulares individuales y agregarles sombreados: obtendrá los parches con:

 patches = pie(…)[0] # The first element of the returned tuple are the pie slices 

A continuación, aplique las escotillas a cada sector (parche):

 patches[0].set_hatch('/') # Pie slice #0 hatched. 

(la lista de sombreados se encuentra en https://matplotlib.org/api/_as_gen/matplotlib.patches.Patch.html#matplotlib.patches.Patch.set_hatch ).

Y aplicas los cambios con:

 pyplot.draw() 

Gráfico de tarta eclosionado]

 import matplotlib.pyplot as plt fig = plt.figure() patterns = [ "/" , "\\" , "|" , "-" , "+" , "x", "o", "O", ".", "*" ] ax1 = fig.add_subplot(111) for i in range(len(patterns)): ax1.bar(i, 3, color='red', edgecolor='black', hatch=patterns[i]) plt.show() 

introduzca la descripción de la imagen aquí

Está en la documentación aquí .

Bien, para texturizar una pieza, debes hacer esto:

si miras aqui

 Return value: If autopct is None, return the tuple (patches, texts): patches is a sequence of matplotlib.patches.Wedge instances texts is a list of the label matplotlib.text.Text instances. 

Entonces miramos la página de Cuñas y vemos que tiene un método set_hatch ().

así que solo tenemos que añadir algunas líneas a la demostración de piechart y …

Ejemplo 1:

 import matplotlib.pyplot as plt fig = plt.figure() patterns = [ "/" , "\\" , "|" , "-" , "+" , "x", "o", "O", ".", "*" ] ax1 = fig.add_subplot(111) for i in range(len(patterns)): ax1.bar(i, 3, color='red', edgecolor='black', hatch=patterns[i]) plt.show() 

Ejemplo 2:

 """ Make a pie chart - see http://matplotlib.sf.net/matplotlib.pylab.html#-pie for the docstring. This example shows a basic pie chart with labels optional features, like autolabeling the percentage, offsetting a slice with "explode", adding a shadow, and changing the starting angle. """ from pylab import * import math import numpy as np patterns = [ "/" , "\\" , "|" , "-" , "+" , "x", "o", "O", ".", "*" ] def little_pie(breakdown,location,size): breakdown = [0] + list(np.cumsum(breakdown)* 1.0 / sum(breakdown)) for i in xrange(len(breakdown)-1): x = [0] + np.cos(np.linspace(2 * math.pi * breakdown[i], 2 * math.pi * breakdown[i+1], 20)).tolist() y = [0] + np.sin(np.linspace(2 * math.pi * breakdown[i], 2 * math.pi * breakdown[i+1], 20)).tolist() xy = zip(x,y) scatter( location[0], location[1], marker=(xy,0), s=size, facecolor= ['gold','yellow', 'orange', 'red','purple','indigo','violet'][i%7]) figure(1, figsize=(6,6)) little_pie([10,3,7],(1,1),600) little_pie([10,27,4,8,4,5,6,17,33],(-1,1),800) fracs = [10, 8, 7, 10] explode=(0, 0, 0.1, 0) piechart = pie(fracs, explode=explode, autopct='%1.1f%%') for i in range(len(piechart[0])): piechart[0][i].set_hatch(patterns[(i)%len(patterns)]) show() 

introduzca la descripción de la imagen aquí

Esto puede ayudarte:

http://matplotlib.org/examples/pylab_examples/demo_ribbon_box.html

que utiliza matplotlib.image.BboxImage

Creo que esto puede cambiar el tamaño de una imagen dada de acuerdo con los datos de entrada.