Matplotlib - fixation de l'axe x de l'échelle et autoscale de l'axe y
Je voudrais parcelle seulement une partie de la matrice, la fixation de x, mais y laisser une partie autoscale. J'ai essayé comme indiqué ci-dessous, mais il ne fonctionne pas.
Des suggestions?
import numpy as np
import matplotlib.pyplot as plt
data=[np.arange(0,101,1),300-0.1*np.arange(0,101,1)]
plt.figure()
plt.scatter(data[0], data[1])
plt.xlim([50,100])
plt.autoscale(enable=True, axis='y')
plt.show()
OriginalL'auteur Pygmalion | 2015-04-05
Vous devez vous connecter pour publier un commentaire.
Mise à l'échelle automatique utilise toujours la gamme complète des données, de sorte que l'axe des y est mis à l'échelle par la pleine mesure de l'axe des données, et pas seulement ce qui est à l'intérieur de la x-limites.
Si vous souhaitez afficher un sous-ensemble de données, alors il est probablement plus facile de ne tracer que ce sous-ensemble:
OriginalL'auteur Joe Kington
Tout Joe Kingston Portant propose certainement la réponse la plus sensée lorsqu'il recommande que seules les données nécessaires à l'être tracée, il y a des situations où il serait préférable de tracer toutes les données et de zoomer à une certaine section. En outre, il serait agréable d'avoir un "autoscale_y" fonction qui exige que les axes de l'objet (c'est à dire, contrairement à la réponse ici, ce qui nécessite l'utilisation directe des données.)
Ici est une fonction qui recadre l'axe y sur la base des données qui est dans le visible, x-région:
C'est quelque chose d'un hack, et ne sera probablement pas travailler dans de nombreuses situations, mais pour un tracé simple, il fonctionne bien.
Voici un exemple simple d'utilisation de cette fonction:
J'ai remplacé y_displayed = yd[((xd>=lo) & (xd<=hi))] avec if len(xd)==2 et xd[0]==0,0 et xd[1]==1.0: y_displayed=yd #cas particulier de la poignée axhline d'autre: y_displayed = yd[((xd>=lo) & (xd<=hi))]
Oui c'est dommage qu'il n'y a pas autoscale_axis, probablement, il sera peut-être déjà mis en œuvre dans la récente mise à jour de matplotlib. Merci pour votre contribution, je l'utilise et fonctionne très bien! Toutefois, même lorsque vous n'en voulez tracer l'ensemble de la gamme de valeurs et ensuite effectuer un zoom avant, @Joe Kinton 's solution est plus simple, en traçant l'ensemble de la gamme sur le panneau de gauche et le masqué valeurs sur la droite.
Vraiment sympa solution! Cela nécessite juste une modification mineure si l'axe des x est un
datetime
:xd = [dt.toordinal() for dt in line.get_xdata()]
Pour toute personne intéressée, j'ai adapté cette fonction sur n'importe quel axe: gist.github.com/ArcturusB/613eaba080a50385fa29e2eff8fe203f.
OriginalL'auteur DanHickstein