。通常はpie chartから始めることができます。それから私たちはプロットに画像を取得する必要があります。これは、plt.imread
を使用し、matplotlib.offsetbox.OffsetImage
を使用して行われます。画像を配置するためには、それぞれの円弧と完全に重なり合うように、適切な座標とズームレベルを見つける必要があります。次に、ウェッジの内側の部分だけが残るように、パイのウェッジのパスが画像のclip pathとして使用されます。塗りつぶされていないくさびのzorderを高い数値に設定すると、境界が画像の上に配置されます。このようにして、ウェッジがイメージで満たされているように見えます。
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()
ありがとう。できます。私はそれを理解するために少し時間を費やす必要があるが、私はそれを働かせた。もう一度ありがとう、私はこれに長い時間を費やし、私は尋ねることにしました。私はこれを完全に作動させようとします。投票には十分な評判はないが、投票に値する。 – CJD