Подтвердить что ты не робот

Matplotlib: ширина линии добавляется к длине строки

Когда я рисую сегмент линии в 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 + 'диаметра "....

4b9b3361

Ответ 1

Похоже, что по умолчанию solid_capstyle есть projecting, который не тот, который вам нужен:

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