是否有使用Python、Matplotlib等执行标注标注的示例
Image source像上面这样有一条线和一个标签从饼图外面指向..看不到任何可能的例子,它是用Mathplotlib完成的....这能用Python完成吗?
8i9zcol21#
可以使用matplotlib**annotations**创建文本标签和注解线。
下面是一个示例,其中标签在数据坐标中手动定位,即饼图的中心是(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()
我们可以使用楔形块的Angular 在合适的位置自动创建标签。
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()
1条答案
按热度按时间8i9zcol21#
可以使用matplotlib**annotations**创建文本标签和注解线。
手动贴标
下面是一个示例,其中标签在数据坐标中手动定位,即饼图的中心是(0,0)坐标。
自动贴标:
我们可以使用楔形块的Angular 在合适的位置自动创建标签。