web-dev-qa-db-fra.com

Changer la plage y pour commencer à partir de 0 avec matplotlib

J'utilise matplotlib pour tracer des données. Voici un code qui fait quelque chose de similaire:

import matplotlib.pyplot as plt
f, ax = plt.subplots(1)
xdata = [1, 4, 8]
ydata = [10, 20, 30]
ax.plot(xdata, ydata)
plt.show(f)

Cela montre une ligne dans un graphique avec l'axe y qui va de 10 à 30. Bien que je sois satisfait de la plage x, je voudrais changer la plage y pour commencer à 0 et ajuster sur le ymax pour tout montrer.

Ma solution actuelle est de faire:

ax.set_ylim(0, max(ydata))

Cependant, je me demande s'il existe un moyen de dire simplement: mise à l'échelle automatique mais commence à partir de 0.

37
Maxime Chéramy

La plage doit être définie après l'intrigue.

import matplotlib.pyplot as plt
f, ax = plt.subplots(1)
xdata = [1, 4, 8]
ydata = [10, 20, 30]
ax.plot(xdata, ydata)
ax.set_ylim(ymin=0)
plt.show(f)

Si ymin est modifié avant le traçage, cela se traduira par une plage de [0, 1].

Edit: l'argument ymin a été remplacé par bottom:

ax.set_ylim(bottom=0)
58
Maxime Chéramy

Essaye ça

import matplotlib.pyplot as plt
xdata = [1, 4, 8]
ydata = [10, 20, 30]
plt.plot(xdata, ydata)
plt.ylim(ymin=0)  # this line
plt.show()

chaîne de doc comme suit:

>>> help(plt.ylim)
Help on function ylim in module matplotlib.pyplot:

ylim(*args, **kwargs)
    Get or set the *y*-limits of the current axes.

    ::

      ymin, ymax = ylim()   # return the current ylim
      ylim( (ymin, ymax) )  # set the ylim to ymin, ymax
      ylim( ymin, ymax )    # set the ylim to ymin, ymax

    If you do not specify args, you can pass the *ymin* and *ymax* as
    kwargs, e.g.::

      ylim(ymax=3) # adjust the max leaving min unchanged
      ylim(ymin=1) # adjust the min leaving max unchanged

    Setting limits turns autoscaling off for the y-axis.

    The new axis limits are returned as a length 2 Tuple.
22
WeizhongTu

Notez que ymin sera supprimé dans Matplotlib 3.2 documentation Matplotlib 3.0.2 . Utilisez à la place bottom:

import matplotlib.pyplot as plt
f, ax = plt.subplots(1)
xdata = [1, 4, 8]
ydata = [10, 20, 30]
ax.plot(xdata, ydata)
ax.set_ylim(bottom=0)
plt.show(f)
3
Sam Sirmaxford