如何消除matplotlib中行尾的带注释文本重叠的问题

时间:2018-10-06 10:16:35

标签: python matplotlib

我有四个不同的列表-

x=['18ww25', '18ww27', '18ww28', '18ww28.1', '18ww29', '18ww29.1', '18ww29.2']

r=[[27, 27, 27, 27, 27, 27, 27, 43, 43, 43],
   [18, 18, 20, 23, 30, 30, 30, 16, 16, 16],
   [24, 25, 28, 32, 39, 39, 43, 74, 74, 74],
   [43, 43, 44, 44, 43, 45, 45, 1, 1, 1],
   [0, 0, 0, 0, 0, 0, 0, 42, 42, 42], 
   [14, 14, 16, 16, 16, 17, 17, 57, 57, 57],
   [14, 14, 14, 14, 14, 14, 14, 5, 5, 5], 
   [0, 0, 0, 0, 0, 0, 0, 4, 4, 4], 
   [8, 8, 8, 8, 8, 8, 8, 3, 3, 3]]

 tableau20 = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120),    
         (44, 160, 44), (152, 223, 138), (214, 39, 40), (255, 152, 150),    
         (148, 103, 189)]
 l=['PIF', 'ucode patch mem', 'ucode patch match', 'pcode patch mem', 
   'pcode global patch match', 'pcode local patch match', 'vcode patch mem',
   'vcode global patch match', 'vcode local patch match'] 

其中x和r是用于绘制线条的列表。 r列表中的每个列表都是针对x列表绘制的。 tableau20是一个包含RGB格式颜色的列表。 “ l”是一个列表,该列表是不同线条的文本标签,并以与绘制线条时相同的顺序保存。

现在我正在使用以下代码绘制图形-

for i in range(len(tableau20)):  #Scale the RGB values to the [0, 1] range, which is the format matplotlib accepts.  
    r, g, b = tableau20[i]    
    tableau20[i] = (r / 255., g / 255., b / 255.) 

fig = plt.figure(figsize=(8,4)) #height x width
ax = plt.subplot(1,1,1)    
ax.spines["top"].set_visible(False)    
ax.spines["bottom"].set_visible(False)    
ax.spines["right"].set_visible(False)    
ax.spines["left"].set_visible(False)
ax.get_xaxis().tick_bottom()    
ax.get_yaxis().tick_left()
maximum=maxi(r)
print(maximum)
plt.ylabel("UTILIZATION [%]",fontsize=7)
plt.xlabel("WORKING WEEK (WW)",fontsize=7)

plt.ylim(0,maximum+11)
plt.yticks(range(0, maximum+11, 10), [str(x) + "%" for x in range(0, maximum+11, 10)], fontsize=4)
plt.tick_params(axis='both', which='both', bottom=False, top=False, labelbottom=True, left=False, right=False, labelleft=True,labelsize=4)
title="SKX "+gt+" PATCH UTILIZATION"
plt.title(title,fontsize=9)

for i in range(len(r)):
        ax.plot(x,r[i],color=tableau20[i])
textno=0
for line, name in zip(ax.lines, l):
    y = line.get_ydata()[-1]
    ax.annotate(l[textno], xy=(.95,y), xytext=(3,0), color=tableau20[textno],xycoords = ax.get_yaxis_transform(), textcoords="offset points",size=7, va="center")
    textno+=1

Graph that i am getting

现在我正在关闭行的文本重叠。此外,每次可能会发生不同的线条彼此靠近的情况,因为每次更新Excel文件时都会绘制此图,并且问题中使用的列表仅取自Excel文件。因此,我需要一个动态解决方案,该解决方案可以在每次绘制图形时使用。

我尝试更改注释中的y坐标,但是它不起作用。有人可以帮我吗

0 个答案:

没有答案