У меня есть данные, которые мне нужны для построения графика, но метки перекрываются. Я не уверен, как заставить этикетки правильно визуализироваться. Вот мой код:
items = [['#024260', 'LOA', '2.805757227344012e-06'],
['#8d5af7', 'MF', '4.971738496305904e-05'],
['#e34045', 'BND', '9.983376434507252e-05'],
['#f19437', 'CASH', '0.00019645638525306184'],
['#17B5C9', 'ETF', '0.000709395584554212'],
['#f85e54', 'STP', '0.0013873917477135414'],
['#88124F', 'PRF', '0.0015986586552010882'],
['#ff3c83', 'UNT', '0.003807557052557499'],
['#f8da00', 'DR', '0.008560450377422474'],
['#4ce068', 'EQS', '0.972791941583156']]
Как видно, первый столбец - это цветной код. 2-й столбец - это тикер, а 3-й - значения, соответствующие этим тикерам в строковом формате.
items = np.array(sorted(items, key=lambda x: x[-1]))
#items = items[items[:,2].argsort()]
labels = items[:,1]
data = (items[:,2].astype(np.float) * 100).round(2)
#chartnum += 1
#path = plot_path + f"/chart-pie_{chartnum}.pdf"
mask = (data > 0) & (data <= 5)
explode = np.where(mask, 0.3,0)
labels = ['%s, %1.2f %%' % (l, float(s)) for l, s in zip(labels, data)]
fig, ax = plt.subplots(figsize=(9, 3))
#plt.gca().axis("equal")
explode = np.where(values > 0, 0.2, 0)
idx = np.argmax(data > 0)
#np.random.shuffle(data[idx:])
patches,texts = pie = ax.pie(data[idx:], colors=items[:,0][idx:],
labeldistance=1.2, pctdistance=1.2,
labels=list(map(lambda x: x, items[idx:,1])), startangle=angle,
radius=3,explode=explode[idx:])
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 left", bbox_to_anchor=(2.5,0,0.5,1))
#ax.legend(patches,labels[idx:], bbox_to_anchor=(2.5,0,0.5,1), loc='center left',frameon=False)
#plt.tight_layout()[![enter image description here][1]][1]
Как видите, у меня возникают проблемы с отображением ярлыков должным образом, без какого-либо наложения на них. Как я могу исправить эту проблему? Спасибо