Matplotlib incorrect display of data on the y-axis

Viewed 21

Matplotlib incorrect display of data on the y-axis. Bars are displayed from coordinate 0.5 to 1.0, but this is not what I would like to see. Coordinates 1.0 are not in the data (height and bottom)

Code for example:

fig, ax = plt.subplots()

x = [0, 1, 2, 3, 4]

height = [0.5047, 0.4999, 0.4985, 0.4999, 0.4987]

bottom = [0.5002, 0.4969, 0.4956, 0.4969, 0.4967]

ax.set_ylim(0, 2)

ax.bar(x=x, height=height, width=0.2, bottom=bottom)

plt.show()

see the output here

1 Answers

Matplotlib Pyplot Bars use the

  • bottom parameter to define the y-coordinate of the bottom of the bar
  • height parameter to define the hight of the bar

Consequently, your bars start at bottom and end at bottom+height.

If you calculate the sum of each of coordinates, you will see that they all end roughly at about 1.0: print([sum(x) for x in zip(height, bottom)]) results in [1.0049000000000001, 0.9968, 0.9941, 0.9968]

If you aim at drawing bars, whose y-coordinate start at bottom and end at height, then subtract them first

fig, ax = plt.subplots()

x = [0, 1, 2, 3, 4]
height = [0.5047, 0.4999, 0.4985, 0.4999, 0.4987]
bottom = [0.5002, 0.4969, 0.4956, 0.4969, 0.4967]

tmpHeight = tuple(map(lambda i, j: i - j, height, bottom))
ax.bar(x=x, height=tmpHeight , width=0.2, bottom=bottom)

plt.show()
Related