Linewidth is added to the length of a line
matplotlib, python
Solution
It looks like the default `solid_capstyle` is `projecting`, which isn't the one you want:
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")
Problem
When I draw a line segment in matplotlib the linewidth seems to be added to the length of the line. Below my code (not the most pythonic code, but it should do the trick). Am I doing something wrong or is this just a feature of 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() ``` What I expected to see is three line segments: `[0,L1], [L1,L2] and [L1,L3]`. But the first line `[0,L1]` extends to `L1` + 'the diameter'....