Les choses fonctionneront parfaitement si vous utilisez NaN
s. None
n'est pas la même chose. A NaN
est un flotteur.
A titre d'exemple :
import numpy as np
import matplotlib.pyplot as plt
plt.scatter([1, 2, 3], [1, 2, np.nan])
plt.show()
Jetez un coup d'œil à pandas
ou des tableaux masqués numpy (et numpy.genfromtxt
pour charger vos données) si vous voulez gérer les données manquantes. Les tableaux masqués sont intégrés dans numpy, mais pandas
est une bibliothèque extrêmement utile, et possède une très belle fonctionnalité de valeur manquante.
A titre d'exemple :
import matplotlib.pyplot as plt
import pandas
x = pandas.Series([1, 2, 3])
y = pandas.Series([1, 2, None])
plt.scatter(x, y)
plt.show()
pandas
utiliza NaN
pour représenter les données masquées, tandis que les tableaux masqués utilisent un tableau de masques distinct. Cela signifie que les tableaux masqués peuvent potentiellement préserver les données originales, tout en les signalant temporairement comme "manquantes" ou "mauvaises". Cependant, ils utilisent plus de mémoire, et ont des problèmes cachés qui peuvent être évités en utilisant NaN
pour représenter les données manquantes.
Autre exemple, l'utilisation de tableaux masqués et de l'option NaN
mais cette fois avec un tracé linéaire :
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 6 * np.pi, 300)
y = np.cos(x)
y1 = np.ma.masked_where(y > 0.7, y)
y2 = y.copy()
y2[y > 0.7] = np.nan
fig, axes = plt.subplots(nrows=3, sharex=True, sharey=True)
for ax, ydata in zip(axes, [y, y1, y2]):
ax.plot(x, ydata)
ax.axhline(0.7, color='red')
axes[0].set_title('Original')
axes[1].set_title('Masked Arrays')
axes[2].set_title("Using NaN's")
fig.tight_layout()
plt.show()