Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyplot饼图子图之间的ConnectionPatch()或pyplot.arrow_Python_Matplotlib_Pie Chart - Fatal编程技术网

Python pyplot饼图子图之间的ConnectionPatch()或pyplot.arrow

Python pyplot饼图子图之间的ConnectionPatch()或pyplot.arrow,python,matplotlib,pie-chart,Python,Matplotlib,Pie Chart,我想用箭头连接这些图表。我了解了ConnectionPatch()函数,但它需要轴的坐标,饼图没有轴,是吗 import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec labels = 'Good', 'Poor', 'Mediocre' sizes = [124, 205, 133] gs = gridspec.GridSpec(2,5) def make

我想用箭头连接这些图表。我了解了ConnectionPatch()函数,但它需要轴的坐标,饼图没有轴,是吗

import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec


labels = 'Good', 'Poor', 'Mediocre'
sizes = [124, 205, 133]

gs = gridspec.GridSpec(2,5)

def make_autopct(sizes):
    def my_autopct(pct):
        total = sum(sizes)
        val = int(round(pct*total/100.0))
        return '{p:.1f}%({v:d})'.format(p=pct,v=val)
    return my_autopct

plt.figure(figsize=(15,8))
plt.subplot(gs[:,2])
plt.axis('equal')
piechart = plt.pie(sizes, radius=3, labels=labels, labeldistance=1.1, textprops={'backgroundcolor':'w', 'fontsize':12}, autopct=make_autopct(sizes), 
pctdistance=0.5, shadow=False, colors='w')[0]
piechart[0].set_hatch('\\\\\\\\\\')
piechart[1].set_hatch('xxxx')
piechart[2].set_hatch('+++')
mpl.rcParams['font.size'] = 20


poor = [201, 25]
mediocre = [97, 32]
good = [83, 30]
label_small = "Private","Government"

plt.subplot(gs[0,0])
plt.axis('equal')
pie_poor = plt.pie(poor, labels=label_small, autopct='%1.1f%%', 
pctdistance=1.5, textprops={'fontsize':8},  shadow=False, colors='w', startangle=0)[0]
pie_poor[0].set_hatch('//////')
pie_poor[1].set_hatch('....')

plt.subplot(gs[0,4])
plt.axis('equal')
pie_good = plt.pie(good, labels=label_small, autopct='%1.1f%%', pctdistance=1.4, textprops={'fontsize':8},  shadow=False, colors='w', startangle=270)[0]
pie_good[0].set_hatch('//////')
pie_good[1].set_hatch('....')

plt.subplot(gs[1,4])
plt.axis('equal')
pie_mediocre = plt.pie(mediocre, labels=label_small, autopct='%1.1f%%', pctdistance=1.3, textprops={'fontsize':8},  shadow=False, colors='w', startangle=180)[0]
pie_mediocre[0].set_hatch('//////')
pie_mediocre[1].set_hatch('....')

plt.draw()


我想将标有“差”的大楔子连接到左侧的小馅饼上,“好”连接到右上角的小馅饼上,“一般”连接到右下角带有箭头的小馅饼上。

matplotlib中的每个绘图都位于一个轴上。要获得轴的控制柄,请使用
ax=plt.子批(..)
。然后,可以使用连接轴

完整代码:
将matplotlib导入为mpl
将matplotlib.pyplot作为plt导入
将matplotlib.gridspec导入为gridspec
将numpy作为np导入
标签=‘好’、‘差’、‘平庸’
尺寸=[124205133]
gs=gridspec.gridspec(2,5)
def make_AutoCT(尺寸):
def my_自动CT(pct):
总数=总和(大小)
val=整数(四舍五入(百分比*总计/100.0))
返回“{p:.1f}%({v:d})”格式(p=pct,v=val)
归还我的自动CT
plt.图(figsize=(15,8))
ax=plt.子批次(gs[:,2])
plt.轴(“相等”)
piechart=plt.pie(大小,半径=3,标签=labeldistance=1.1,textprops={'backgroundcolor':'w','fontsize':12},AutoCT=make_AutoCT(大小),
pctdistance=0.5,shadow=False,colors='w')[0]
piechart[0]。设置图案填充(“\”)
piechart[1]。设置图案填充('xxxx')
piechart[2]。设置_图案填充('++'))
mpl.rcParams['font.size']=20
差=[201,25]
平庸=[97,32]
好=[83,30]
label_small=“私人”、“政府”
ax1=plt.子批次(gs[0,0])
plt.轴(“相等”)
pie_poor=plt.pie(差,标签=label_small,自动CT='%1.1f%%),
pctdistance=1.5,textprops={'fontsize':8},shadow=False,colors='w',startangle=0)[0]
饼图[0]。设置图案填充('//'))
pie_poor[1]。设置_图案填充(“..”)
ax2=plt.子批次(gs[0,4])
plt.轴(“相等”)
pie_good=plt.pie(good,labels=label_small,autoct='%1.1f%%',pctdistance=1.4,textprops={'fontsize':8},shadow=False,colors='w',startangle=270)[0]
饼图[0]。设置图案填充('//'))
pie_good[1]。设置图案填充(“…”)
ax3=plt.子批次(gs[1,4])
plt.轴(“相等”)
pie_mediocre=plt.pie(平庸,labels=label_small,autoct='%1.1f%%',pctdistance=1.3,textprops={'fontsize':8},shadow=False,colors='w',startangle=180)[0]
平庸派[0]。设置图案填充('//'))
饼图平庸[1]。设置图案填充(“..”)
从matplotlib.patches导入ConnectionPatch
xy=(1,1)
con=ConnectionPatch(xyA=(0,0),xyB=xy,coordsA=“data”,coordsB=“data”,
axesA=ax2,axesB=ax,color=“crimson”,lw=3)
ax2.添加艺术家(con)
xy=(-1,0)
con=ConnectionPatch(xyA=(0,0),xyB=xy,coordsA=“data”,coordsB=“data”,
axesA=ax1,axesB=ax,color=“暗蓝色”,lw=3)
ax1.添加艺术家(con)
xy=(1,-1)
con=ConnectionPatch(xyA=(0,0),xyB=xy,coordsA=“data”,coordsB=“data”,
axesA=ax3,axesB=ax,color=“gold”,lw=3)
ax3.添加艺术家(con)
plt.show()