Est-il possible de définir les valeurs max et min d'un axe dans matplotlib, mais ensuite une mise à l'échelle automatique lorsque les valeurs sont beaucoup plus petites que ces limites?
Par exemple, je veux qu'un graphique de changement en pourcentage soit limité entre -100 et 100, mais beaucoup de mes graphiques seront entre, disons, -5 et 5. Quand j'utilise ax.set_ylim (-100 , 100)
, ce graphique n'est pas très clair.
Je suppose que je pourrais utiliser quelque chose comme ax.set_ylim (max ((- 100, data-n)), min ((100, data + n)))
, mais y a-t-il plus conçu pour y parvenir?
3 Réponses :
Pourquoi ne pas simplement définir des limites d'axe en fonction de la plage de données à chaque mise à jour du tracé?
if min(abs(data)) < thresh: ax.set_ylim(min(data), max(data))
Ou vérifier si la plage de données est inférieure à un certain seuil, puis définir des limites d'axe.
/ p>
ax.set_ylim(min(data), max(data))
Je veux limiter l'axe à un certain niveau dans le cas de valeurs extrêmes. Si j'utilisais le min et le max et qu'il y avait une valeur de 100000, le reste du graphique n'aurait aucun sens.
Si vous souhaitez supprimer les valeurs aberrantes extrêmes, vous pouvez utiliser la commande numpy quantile
pour trouver, disons, les premiers 0,001% des données et les derniers 99,999%.
near_min = np.quantile(in_data, 0.0001) near_max = np.quantile(in_data, 0.9999) ax.set_ylim(near_min, near_max)
Vous devrez ajuster le quantile en fonction du volume de données que vous déposez. Vous voudrez peut-être inclure un test pour savoir si la différence entre near_min et true min est significative?
Désolé, mon lien n'a pas fonctionné: fonction quantile
J'aime cette idée, mais malheureusement pour mes données, je ne peux pas être sûr de capturer toutes les valeurs aberrantes avec un pourcentage de données défini.
Comme ImportanceOfBeingErnest l'a souligné , il n'y a pas de support pour cette fonctionnalité. En fin de compte, j'ai juste utilisé mon idée originale, mais je l'ai mise à l'échelle par la valeur du max et du min pour donner l'impression de mise à l'échelle automatique.
data_min <= 0, data_max >= 0
Où pour mon cas il est vrai que
ax.set_ylim(max((-100, data_min+data_min*0.1)), min((100, data_max+data_max*0.1)))
Non, il n'y a pas de méthode intégrée pour la détection des valeurs aberrantes des échelles. Soit vous fixez les limites, soit vous ne le faites pas. (Seule exception, vous pouvez définir l'une des limites et laisser l'autre mise à l'échelle automatique, mais cela ne sert à rien dans ce cas.)