Remplir la zone sous la courbe dans python matlibplot sur l'échelle logarithmique
Je suis en train de remplir l'aire sous une courbe avec matplotlib. Le script ci-dessous fonctionne très bien.
import matplotlib.pyplot as plt
from math import sqrt
x = range(100)
y = [sqrt(i) for i in x]
plt.plot(x,y,color='k',lw=2)
plt.fill_between(x,y,0,color='0.8')
plt.show()
Cependant si je l'y-échelle logarithmique (voir ci-dessous). Parfois elle remplit la zone au-dessus de la courbe ! Quelqu'un peut-il m'aider? Je tiens à remplir l'espace entre la courbe y = 0.
x = range(100)
y = [sqrt(i) for i in x]
plt.plot(x,y,color='k',lw=2)
plt.fill_between(x,y,0,color='0.8')
plt.yscale('log')
plt.show()
Merci d'avance!
source d'informationauteur Loran de Vries
Vous devez vous connecter pour publier un commentaire.
Avec logarithmique y-échelle,
fill_between(x, y, 0)
dit matplotlib pour remplir la région entrelog(0) = -infinity
etlog(y)
. Naturellement, il hésite. Vous pouvez éviter ce problème en changeant0
pour certains petit nombre comme1e-6
.Comme mentionné,
0 -> -inf
dans une échelle logarithmique. Ainsi, toute tracée valeur qui est égale ou inférieure à zéro serait problématique (nécessitant une infinie ylim dans l'espace du journal). Ce problème existe indépendamment de savoir si vous utilisez fill_between() ou pas.Heureusement, matplotlib fournit un moyen de gérer ce bien. Dans le comportement par défaut, matplotlib masques les valeurs de chaque valeur inférieure ou égale à zéro. Dans votre exemple, cela signifie que l'ensemble de votre
y=0
ligne est masquée et exclus du polygone définissant remplis entre la zone. Le résultat est que le polygone est tout simplement fermé par le tracé d'une ligne de(100,10)
vers le bas et vers la gauche pour(0,0)
. Une autre option est de clip les valeurs. Dans ce cas, ils sont mis à1e-300
et ne sont pas consultés lors de la détermination de la ylim de l'intrigue. Donc, pour obtenir le résultat souhaité, procédez de la manière suivante: