2012-04-24 10 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() 

私が見ると予想されたのは、3つの線分:[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

+0

+1は 'solid_capstyle'を認識しませんでした – bmu

関連する問題