我有一个以百分比为标签的堆积饼图。外部饼图的标签与我希望的一样;但是,内部饼图的标签应该基于它福尔斯外部饼图下的位置。例如,在下图中,对于外部饼图的每种颜色,内部饼图的百分比标签的总和应该为100%。当前,对于红色外部饼图,内部饼图的百分比标签分别为11.0%、12.0% 7.0%,这是不考虑外部图表的百分比。我希望它们显示类似于35%、38%、27%的内容,外部饼图的绿色和黄色也是如此,其中内部图表标签取决于外部饼图的颜色。
这是一个可重现的例子
import pandas as pd
import numpy as np
import random
import matplotlib.pyplot as plt
options = ['RED','YELLOW','GREEN']
color_list1 = []
color_list2 = []
for i in np.arange(100):
color1 = random.choice(options)
color2 = random.choice(options)
color_list1.append(color1)
color_list2.append(color2)
test_df = pd.DataFrame(list(zip(color_list1, color_list2)), columns =['Outer_Color', 'Inner_Color'])
outer = pd.DataFrame(test_df.groupby('Outer_Color').size())
inner = pd.DataFrame(test_df.groupby(['Outer_Color', 'Inner_Color']).size())
inner_labels = inner.index.get_level_values(1)
my_pal = {"RED": "r", "YELLOW": "yellow", "GREEN":"g"}
fig, ax = plt.subplots(figsize=(14,7))
size = 0.3
ax.pie(outer.values.flatten(), radius=1,
# labels=outer.index,
autopct='%1.1f%%', pctdistance=0.85, # labeldistance=0.2,
wedgeprops=dict(width=size, edgecolor='w'),
colors=[my_pal[key] for key in outer.index])
ax.pie(inner.values.flatten(), radius=1-size,
# labels = inner_labels,
autopct='%1.1f%%', pctdistance=0.7, # labeldistance=1.2,
wedgeprops=dict(width=size, edgecolor='w'),
colors=[my_pal[key] for key in inner_labels])
plt.show()
1条答案
按热度按时间fnvucqvd1#
可以采用的一种方法是计算内部楔形块相对于外部楔形块的百分比,然后创建新标签,以便在执行
ax.pie
时通过。例如:现在,我们可以使用
labels
传递ax.pie
中的新标签:请注意,这是假设每个外部楔形块都有相同数量的内部楔形块。如果内部楔形块的数量不规则,则方法类似,但您可以在列表中设置每个外部楔形块的内部楔形块数量:
希望这对你有帮助-干杯!