44 votes

Comment lisser le tracé du contour matplotlib?

J'ai un tableau numpy avec cette forme: (33,10). Lorsque je trace un contour, j'obtiens une image moche comme ceci: entrez la description de l'image ici

tandis que contour() ne semble pas avoir d'argument sur le lissage ou une sorte de fonction d'interpolation.

Je m'attendais en quelque sorte à ce que l'outil qui offre un tracé de contour devrait également offrir un lissage.
Existe-t-il un moyen simple de le faire en MPL?

57voto

Joe Kington Points 68089

Comme d'autres l'ont déjà souligné, vous devez interpoler vos données.

Il existe plusieurs façons de procéder, mais pour commencer, pensez à scipy.ndimage.zoom .

Comme un exmaple rapide:

 import numpy as np
import scipy.ndimage
import matplotlib.pyplot as plt

data = np.loadtxt('data.txt')

# Resample your data grid by a factor of 3 using cubic spline interpolation.
data = scipy.ndimage.zoom(data, 3)

plt.contour(data)
plt.show()
 

entrez la description de l'image ici

8voto

imsc Points 2027

Il n'y a pas de moyen facile d'obtenir un contour lisse. Une alternative consiste à essayer imshow . Vous pouvez rechercher ici d'autres possibilités.

 import pylab as plt
import numpy as np

Z=np.loadtxt('data.txt')
plt.subplot(131)
plt.imshow(Z,interpolation='nearest')

plt.subplot(132)
plt.imshow(Z)

plt.subplot(133)
plt.imshow(Z,interpolation='gaussian')

plt.show()
 

entrez la description de l'image ici

3voto

ymn Points 1608

Essayez de lisser votre ensemble de données avec un gaussian_filter . Voir l' exemple pour plus d'informations.

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