2012-04-24 20 views
22

當我在matplotlib中繪製線段時,線寬似乎被添加到線的長度。在我的代碼下面(不是最pythonic代碼,但它應該做的伎倆)。我做錯了什麼或者這只是matplotlib的一個功能?Matplotlib:線寬被添加到線的長度

import matplotlib.pyplot as plt 
import numpy as np 
L1=100 
L2=75 
L3=100 
Y=3 
N=5 
l_prev=0 
for l,c in zip(np.linspace(0,L1,N),range(N)) : 
    plt.plot([l_prev,l],[0,0],'r',linewidth=20) 
    l_prev=l 
l_prev=L1 
for l,c in zip(np.linspace(L1,L1+L2,N),range(N)) : 
    plt.plot([l_prev,l],[Y,Y],'g',linewidth=1) 
    l_prev=l 
l_prev=L1 
for l,c in zip(np.linspace(L1,L1+L3,N),range(N)) : 
    p = plt.plot([l_prev,l],[-Y,-Y],'b',linewidth=10) 
    l_prev=l 
plt.axvspan(xmin=L1,xmax=L1) 
plt.axis([-5,205,-5,5]) 
plt.show() 

我希望看到什麼是三條線段:[0,L1], [L1,L2] and [L1,L3]。但第一線[0,L1]延伸到L1 + '' 的直徑....

回答

50

它看起來像默認solid_capstyleprojecting,這是不是你想要的:

plt.figure() 
plt.plot([0, 100], [5, 5], linewidth=50, linestyle="-", c="blue", 
     solid_capstyle="butt") 
plt.plot([0, 100], [15, 15], linewidth=50, linestyle="-", c="red", 
     solid_capstyle="round") 
plt.plot([0, 100], [25, 25], linewidth=50, linestyle="-", c="purple", 
     solid_capstyle="projecting") 
plt.axvline(x=100, c="black") 
plt.xlim(0, 125) 
plt.ylim(0, 30) 
plt.savefig("cap.png") 

enter image description here

+0

大。正是我想要的! – user989762 2012-04-24 14:13:39

+0

+1不知道'solid_capstyle' – bmu 2012-04-27 22:58:30