我正在努力使下面的饼图更漂亮:
特别是,我对标签有一个明显的问题。我想旋转它们并将它们居中放置在相应的饼图切片上方,但我只能旋转它们。此外,旋转需要通过设置进行大量调整
pie_properties[1][0].set_rotation(30)
每个标签的度数值不同。你知道吗
有没有一种方法可以自动实现,或者至少用一种更简单的方法?你知道吗
这是我的密码:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
### Data structure:
# Network type:
group_names = ['Group 1', 'Group 2', 'Group 3']
group_vals = [43,49,38]
group_colors = ['w']*3
#Information level:
info_names = ['Subgroup 1', 'Subgroup 2', \
'Subgroup 1', 'Subgroup 2',\
'SSubgroup 1', 'Subgroup 2']
info_vals = np.array([[27,16],[26,23],[14,24]])
my_blue = [x/255 for x in [30,144,255]]
info_colors = [my_blue,'gray',\
my_blue,'gray',\
my_blue,'gray']
corr_vals = np.array([[10,3,7,3,4], [4,4,4,2,2],\
[10,5,5,3,3], [10,5,5,1,2],\
[4,4,2,2,2], [12,2,2,1,7]])
pale_green = [x/255 for x in [152,251,152]]
pale_red = [x/255 for x in [240,128,128]]
pale_gray = [x/255 for x in [169,169,169]]
corr_colors = ['green',pale_green,pale_gray,pale_red,'red', 'green',pale_green,pale_gray,pale_red,'red',\
'green',pale_green,pale_gray,pale_red,'red', 'green',pale_green,pale_gray,pale_red,'red',\
'green',pale_green,pale_gray,pale_red,'red', 'green',pale_green,pale_gray,pale_red,'red',]
#inner layer
pie_properties = ax.pie(group_vals, radius=1, colors=group_colors,
labels=group_names, labeldistance=0.7,
wedgeprops=dict(width=0.3, edgecolor='k'))
pie_properties[1][0].set_rotation(-45) #<===rotation
pie_properties[1][1].set_rotation(90)
pie_properties[1][2].set_rotation(-135)
#middle layer
pie_properties = ax.pie(info_vals.flatten(), radius=1+0.4, colors=info_colors,
labels=info_names, labeldistance=0.7,
wedgeprops=dict(width=0.4, edgecolor='w'))
pie_properties[1][0].set_rotation(-45)
pie_properties[1][1].set_rotation(15)
pie_properties[1][2].set_rotation(65)
pie_properties[1][3].set_rotation(125)
pie_properties[1][4].set_rotation(-160)
pie_properties[1][5].set_rotation(-125)
#outer layer
ax.pie(corr_vals.flatten(), radius=1+0.4+0.5, colors=corr_colors,
wedgeprops=dict(width=0.5, edgecolor='w'))
ax.set(aspect="equal")
plt.show()
我想你可以用一点三角测量法来计算所需要的角度。由于标签放置在饼图楔块的平均角度范围内,因此计算角度很容易。根据文本是在下半部分还是在上半部分,您可以加减90度。你知道吗
但是,最佳径向位置需要手动调整。在这里,我分别选择了0.80和0.82,但这肯定取决于数字和字体大小。你知道吗
相关问题 更多 >
编程相关推荐