Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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 将百分比标签添加到三级圆环图_Python_Matplotlib - Fatal编程技术网

Python 将百分比标签添加到三级圆环图

Python 将百分比标签添加到三级圆环图,python,matplotlib,Python,Matplotlib,我想为我的三层甜甜圈图中的每个标签和层添加百分比值 下面的代码适当地生成三层圆环图和图例。但是,它会弄乱百分比值的显示(请参阅此问题底部的输出图) 堆栈溢出或其他地方的当前解决方案仅适用于向饼图/圆环图(例如:)添加百分比值,但我的饼图/圆环图有三个层/级别。我的代码如下: import matplotlib.pyplot as plt import numpy as np fig = plt.figure() fig.set_figheight(7) fig.set_figwidth(22)

我想为我的三层甜甜圈图中的每个标签和层添加百分比值

下面的代码适当地生成三层圆环图和图例。但是,它会弄乱百分比值的显示(请参阅此问题底部的输出图)

堆栈溢出或其他地方的当前解决方案仅适用于向饼图/圆环图(例如:)添加百分比值,但我的饼图/圆环图有三个层/级别。我的代码如下:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
fig.set_figheight(7)
fig.set_figwidth(22)

ax1 = fig.add_subplot(121)

first_labels = ["Bonjovi", "Superman", "Darius_royale", "Stargazer_1991_viz", "Obligatory_Vis1", "Gertrude", 'Trimbel', "Olio", "Iniwaka"]
first_sizes = [2000, 300, 200, 100, 100, 150, 40, 30, 700]

second_sizes = [1000, 200, 200, 400, 500, 40, 1, 1, 1000]

third_sizes = [500, 300, 400, 500, 400, 100, 5, 2, 800]

flatui = (sns.diverging_palette(20, 250, n=8))

bigger = plt.pie(first_sizes, colors=flatui, startangle=90, frame=True, radius = 1,
                 wedgeprops={'edgecolor':'k'}, autopct = '%1.1%%f')

smaller = plt.pie(second_sizes, colors=flatui, radius=0.9, startangle=90,
                 wedgeprops={'edgecolor':'k'}, autopct = '%1.1%%f')

smallest = plt.pie(third_sizes, colors=flatui, radius=0.8, startangle=90, 
                  wedgeprops={'edgecolor':'k'}, autopct = '%1.1%%f')

centre_circle = plt.Circle((0, 0), 0.7, color='white', linewidth=0)

plt.gca().add_artist(centre_circle)

# add legend to current ax:
plt.gca().legend(first_labels, loc='center right', bbox_to_anchor=(1,0,.4,1), frameon = True)

plt.show();

上述代码的结果如下所示:


有人能告诉我如何在每个甜甜圈内整齐地显示百分比值吗

总结我的评论,下面是我从中获得更好图形输出的代码,我相信,您正在寻找的是:

导入matplotlib.pyplot作为plt
将numpy作为np导入
#可以从饼图调用的示例函数(autopct=autopct)
def自动CT(pct):
如果pct>0.5:
返回f'{pct:.2f}%'
其他:
返回“”
图=plt.图()
图1设置图(7)
图组图(22)
ax1=图添加子批次(121)
第一组标签=(
“邦乔维”,
“超人”,
“大流士·罗亚尔”,
“Stargazer 1991即”,
"1",,
“格特鲁德”,
“特里贝尔”,
“奥利奥”,
“伊尼瓦卡”
)
第一组尺寸=(2000、300、200、100、100、150、40、30、700)
第二个_大小=(1000、200、200、400、500、40、1、1、1000)
第三种尺寸=(500、300、400、500、400、100、5、2800)
flatui=(sns发散调色板(20250,n=8))
更大=plt.pie(
第一种尺寸,
颜色=扁平,
startangle=90,
帧=真,
半径=1,
wedgeprops={'edgecolor':'k'},
#自动扫描='.2f%%',0,
自动CT=自动CT,
pctdistance=1
)
更小=plt.pie(
第二种尺寸,
颜色=扁平,
半径=0.9,
startangle=90,
wedgeprops={'edgecolor':'k'},
#自动扫描='.2f%%',0,
自动CT=自动CT,
pctdistance=.9
)
最小值=plt.pie(
第三种尺寸,
颜色=扁平,
半径=0.8,
startangle=90,
wedgeprops={'edgecolor':'k'},
#自动扫描='.2f%%',0,
自动CT=自动CT,
pctdistance=.8
)
圆心=plt.圆((0,0),0.7,颜色=白色,线宽=0)
plt.gca().添加艺术家(中心圆)
#将图例添加到当前ax:
plt.gca()图例(
第一,,
loc='center right',
bbox_至_锚=(1,0,4,1),
frameon=True
)
plt.show()
您需要调整
pctdistance
,直到对结果满意为止

编辑:

经过一点研究,我写了这个更好的(IMHO)版本:

导入matplotlib.pyplot作为plt
图,ax=plt.子批次()
ax.轴(“相等”)
大小=dict(
第一个=(2000、300、200、100、100、150、40、30、700),
秒=(1000、200、200、400、500、40、1、1、1000),
第三=(50030040050040010052800)
)
百分位数=dict(
first=[x*100/总和(大小['first']),对于大小为['first']]的x,
秒=[x*100/和(大小['second']),对于大小['second']]的x,
第三个=[x*100/总和(大小为['third']),对于大小为['third']]的x
)
标签=口述(
first=[f“{x:.2f}%”如果x在百分位数['first']]中的x>0.5 else',
second=[f”{x:.2f}%“如果x>其他x>.5 else''表示x,则为百分位数['second']],
第三个=[f“{x:.2f}%”如果x>0.5 else''表示x的百分位数['third']]
)
宽度=0.35
半径=1.5
首先,uux=ax.pie(
大小[“第一”],
startangle=90,
半径=半径,
labeldistance=.9,
标签=标签['first'],
rotatelabels=真
)
其次,uux=ax.pie(
大小[‘秒’],
半径=半径-宽度,
startangle=90,
labeldistance=.9,
标签=标签['second'],
rotatelabels=真
)
第三,uuz=ax.pie(
大小[‘第三’],
半径=半径-2*宽度,
startangle=90,
labeldistance=.9,
标签=标签[‘第三’],
rotatelabels=真
)
plt.setp(第一个+第二个+第三个,宽度=宽度,边色=白色)
plt.show()

总结我的评论,以下是我从中获得更好图形输出的代码,我相信,您正在寻找的是:

导入matplotlib.pyplot作为plt
将numpy作为np导入
#可以从饼图调用的示例函数(autopct=autopct)
def自动CT(pct):
如果pct>0.5:
返回f'{pct:.2f}%'
其他:
返回“”
图=plt.图()
图1设置图(7)
图组图(22)
ax1=图添加子批次(121)
第一组标签=(
“邦乔维”,
“超人”,
“大流士·罗亚尔”,
“Stargazer 1991即”,
"1",,
“格特鲁德”,
“特里贝尔”,
“奥利奥”,
“伊尼瓦卡”
)
第一组尺寸=(2000、300、200、100、100、150、40、30、700)
第二个_大小=(1000、200、200、400、500、40、1、1、1000)
第三种尺寸=(500、300、400、500、400、100、5、2800)
flatui=(sns发散调色板(20250,n=8))
更大=plt.pie(
第一种尺寸,
颜色=扁平,
startangle=90,
帧=真,
半径=1,
wedgeprops={'edgecolor':'k'},
#自动扫描='.2f%%',0,
自动CT=自动CT,
pctdistance=1
)
更小=plt.pie(
第二种尺寸,
颜色=扁平,
半径=0.9,
startangle=90,
wedgeprops={'edgecolor':'k'},
#自动扫描='.2f%%',0,
自动CT=自动CT,
pctdistance=.9
)
最小值=plt.pie(
第三种尺寸,
颜色=扁平,
半径=0.8,
startangle=90,
wedgeprops={'edgecolor':'k'},
#自动扫描='.2f%%',0,
自动CT=自动CT,
pctdistance=.8
)
圆心=plt.圆((0,0),0.7,颜色=白色,线宽=0)
plt.gca().添加艺术家(中心圆)
#将图例添加到当前ax:
plt.gca()图例(
第一,,
loc='中间偏右',
bbox_至_锚=(1,0,4,1),
frameon=True
)
plt.show()
您需要调整
pctdistance
,直到对结果满意为止

编辑:

经过一点研究,我写了这个更好的(IMHO)版本:

导入matplotlib.pyplot作为plt
图,ax=plt.子批次()
ax.轴(“相等”)
大小=dict(
第一个=(2000、300、200、100、100、150、40、30、700),
秒=(1000、200、200、400、500、40、1、1、1000),
第三=(50030040050040010052800)
)