2 votes

Matplotlib plot est tracé de la mauvaise façon

À l'aide de numpy et matplotlib, j'essaie de tracer un ensemble de points de données polyfonctionnels :

x = [0, 5, 10, 15, 20]
y = [0, 0.07, 0.14, 0.2, 0.27]

En utilisant ce code :

import numpy as np 
import matplotlib.pyplot as plt
x = [0, 5, 10, 15, 20]
y = [0, 0.07, 0.14, 0.2, 0.27]

poly = np.polyfit(x, y, 1)
f = np.poly1d(poly)

plt.plot(f)
plt.show()

La variable f dans le code ci-dessus est 0.0134 x + 0.002 . Ce polynôme, lorsqu'il est tracé, est censé pencher vers la droite. Mais quand je le trace, il montre ceci : Plotted polyfit polynomial

Qu'est-ce qui pourrait clocher dans ce code ?

3voto

user502144 Points 809

Ce que vous voyez est le tracé des coefficients de la fonction linéaire f mais pas ses valeurs. C'est la même chose que de tracer deux points :

plt.plot([0.0134, 0.002])

Cela se produit parce que f est converti en liste dans plt.plot :

print(list(f))

[0.0134, 0.002]

Les points sont affichés avec les coordonnées (0, 0.0134) et (1, 0.002), parce que 0 et 1 sont les valeurs x par défaut dans l'environnement de l'ordinateur. plt.plot .

Ce que vous voulez, c'est évaluer f aux points x et tracer ses valeurs :

plt.plot(x, [f(xi) for xi in x])

[f(xi) for xi in x] peut être raccourci tout comme f(x) car f peut prendre des arguments de liste, de sorte que le code devient :

plt.plot(x, f(x))

comme déjà mentionné dans d'autres réponses.

Comme f est une fonction linéaire, 2 points suffisent. x[0] est le premier point et x[-1] le dernier :

plt.plot([x[0], x[-1]], [f(x[0]), f(x[-1])])

enter image description here

2voto

Vous devez passer x dans le polynôme pour obtenir les valeurs correspondantes. y valeurs :

plt.plot(x, f(x)) # this should solve your issue

1voto

Péter Leéh Points 1668

Si vous imprimez f qui renvoie poly1d([0.0134, 0.002 ]) . Ainsi, si vous essayez de tracer cette courbe, elle tracera une ligne entre 0,0134 et 0,002 sur l'intervalle [0, 1].

Ce que vous voulez vraiment faire, c'est évaluer f en x :

plt.plot(x, f(x))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X