Insertar imagen en la sección de gráfico circular

Estoy usando python 3.5.2. Me gustaría hacer un gráfico circular con una imagen png incrustada. Tengo fotos de ciertos productos a granel que me gustaría insertar en las rebanadas. Por ejemplo fresas en una rebanada y raspberrys en otra. Al igual que muestra la imagen http://sofes.miximages.com/python/pie_chart_with_raspberries.png .

Puedo producir imágenes e incluso trazar imágenes en lugar de puntos como se muestra aquí Matplotlib: ¿Cómo trazar imágenes en lugar de puntos?

Sin embargo, no pude encontrar ningún enfoque hacia lo que estoy proponiendo. Supongo que podría hacerse manualmente en pintura, pero estaba tratando de evitar eso.

introduzca la descripción de la imagen aquí

Eso es seguro posible. Podemos comenzar con un gráfico circular normal. Entonces tendríamos que poner las imágenes en la ttwig. Esto se hace usando plt.imread y usando matplotlib.offsetbox.OffsetImage . Tendríamos que encontrar buenas coordenadas y niveles de zoom para colocar la imagen, de modo que se superponga completamente con la respectiva cuña de tarta. Luego, el camino de la cuña del pastel se utiliza como un clip de la imagen, de modo que solo queda la parte dentro de la cuña. La configuración de un borde alto de la cuña sin rellenar garantiza que los bordes se coloquen encima de la imagen. De esta manera parece que las cuñas se llenan con la imagen.

 import matplotlib.pyplot as plt from matplotlib.patches import PathPatch from matplotlib.offsetbox import OffsetImage, AnnotationBbox total = [5,7,4] labels = ["Raspberries", "Blueberries", "Blackberries"] plt.title('Berries') plt.gca().axis("equal") wedges, texts = plt.pie(total, startangle=90, labels=labels, wedgeprops = { 'linewidth': 2, "edgecolor" :"k","fill":False, }) def img_to_pie( fn, wedge, xy, zoom=1, ax = None): if ax==None: ax=plt.gca() im = plt.imread(fn, format='png') path = wedge.get_path() patch = PathPatch(path, facecolor='none') ax.add_patch(patch) imagebox = OffsetImage(im, zoom=zoom, clip_path=patch, zorder=-10) ab = AnnotationBbox(imagebox, xy, xycoords='data', pad=0, frameon=False) ax.add_artist(ab) positions = [(-1,0.3),(0,-0.5),(0.5,0.5)] zooms = [0.4,0.4,0.4] for i in range(3): fn = "data/{}.png".format(labels[i].lower()) img_to_pie(fn, wedges[i], xy=positions[i], zoom=zooms[i] ) wedges[i].set_zorder(10) plt.show()