Python PieChart(是否可以做标注)

iHa*_*aag 2 matplotlib python-2.7

是否有使用Python,Matplotlib等制作标注标签的示例

在此处输入图片说明
图片来源

像上面这样的线条和从饼图外部指向标签的东西..无法看到使用Mathplotlib完成的任何示例....可以使用Python吗?

Imp*_*est 5

您可以使用matplotlib 注释创建文本标签和注释行。

手动贴标

这是一个示例,其中将标签手动定位在数据坐标中,即饼图的中心是(0,0)坐标。

import matplotlib.pyplot as plt 

fig, ax= plt.subplots(figsize=(4,4))
plt.subplots_adjust(bottom=0.3)
total = [13,87]
plt.title('How to spot intellectuals on TV')
plt.gca().axis("equal")
pie = plt.pie(total, startangle=93)
labels = ["1. They say sophisticated things", "2. They sit in front of a bookshelf"]

bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72)
arrowprops=dict(arrowstyle="-",connectionstyle="angle,angleA=0,angleB=90")
kw = dict(xycoords='data',textcoords='data',
          arrowprops=arrowprops, bbox=bbox_props, zorder=0)
plt.gca().annotate("2", xy=(0, 0), xytext=( 1.1, -0.8), **kw )
plt.gca().annotate("1", xy=(0, 0), xytext=(-1.1,  0.8), **kw )

plt.legend(pie[0],labels, loc="center", bbox_to_anchor=(0.5,-0.1))
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

自动贴标签:

我们可以使用楔形的角度在合适的位置自动创建标签。

import matplotlib.pyplot as plt
import numpy as np 

fig, ax= plt.subplots(figsize=(4,4))
plt.subplots_adjust(bottom=0.3)
total = [12,15,12,13,16]
plt.title('My repair strategies')
plt.gca().axis("equal")
patches, texts = pie = plt.pie(total, startangle=5)
labels = ["1. roaring at it", 
          "2. hitting it",
          "3. using superglue",
          "4. using duct tape",
          "5. dismantling it, then ditch it"]

bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72)
arrowprops=dict(arrowstyle="-",connectionstyle="angle,angleA=0,angleB=90")
kw = dict(xycoords='data',textcoords='data',arrowprops=arrowprops, 
          bbox=bbox_props, zorder=0, va="center")

for i, p in enumerate(patches):
    ang = (p.theta2 - p.theta1)/2.+p.theta1
    y = np.sin(ang/180.*np.pi)
    x = 1.35*np.sign(np.cos(ang/180.*np.pi))
    plt.gca().annotate(str(1+i), xy=(0, 0), xytext=( x, y), **kw )

plt.legend(pie[0],labels, loc="center", bbox_to_anchor=(0.5,-0.2))
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明