Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linewidth is added to the length of a line

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'....

like image 966
user989762 Avatar asked Apr 24 '12 11:04

user989762


People also ask

What is linewidth in Matplotlib?

The line width simply helps to give a unique description or visual to a particular data set in a plot. The default value for the line width of a plot in Matplotlib is 1 . However, you can change this size to any size of your choice.

How do I insert a horizontal line in Matplotlib?

In matplotlib, if you want to draw a horizontal line with full width simply use the axhline() method. You can also use the hlines() method to draw a full-width horizontal line but in this method, you have to set xmin and xmax to full width.


1 Answers

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") 

enter image description here

like image 142
DSM Avatar answered Sep 20 '22 05:09

DSM