Home > Back-end >  Matplotlib incorrect display of data on the y-axis
Matplotlib incorrect display of data on the y-axis

Time:09-24

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

CodePudding user response:

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