Comment lisser matplotlib tracé de contour?
J'ai un tableau numpy avec cette forme: (33,10). Quand j'ai tracé le contour-je obtenir laide de l'image comme ceci:
tout contour()
ne semble pas avoir le moindre argument à propos de lissage ou une sorte d'interpolation de la fonction.
J'ai un peu attendu qu'un outil offre une tracé de contour devrait offrir de lissage trop.
Est-il simple de le faire dans MPL?
Vous devez vous connecter pour publier un commentaire.
Comme d'autres l'ont déjà souligné, vous avez besoin pour interpoler des données.
Il y a un certain nombre de façons différentes de le faire, mais pour commencer, il y a
scipy.ndimage.zoom
.Comme un rapide exemple:
griddata
est qu'il est destiné de façon irrégulière échantillonnés entrées (c'est à dire des données éparses). Pour re-interpolation régulièrement les données cartographiées il y a de différent, beaucoup plus d'algorithmes efficaces.scipy.ndimage.zoom
exploits régulièrement quadriller la nature de l'entrée. Il peut ne pas être évident pour une petite entrée de la grille, mais pour les grandes grilles,zoom
peuvent être de plusieurs ordres de grandeur plus rapide. Toutefois, si vous n'avez pas de grille régulière pour commencer, alors oui,griddata
ou quelque chose de semblable (par exemple,scipy.interpolate.Rbf
) est ce que vous voulez.scipy.ndimage.zoom
pour en savoir un peu plus.Dans le cas où vos données sont éparses, Joe Kingtons réponse est grande.
Dans le cas où vos données sont bruyant, vous devriez envisager de filtrage à la place:
Il n'y a pas de moyen facile d'obtenir un contour lisse. Une alternative est d'essayer
imshow
. Vous pouvez regarder ici pour d'autres possibilités.D'essayer de lisser votre jeu de données avec un gaussian_filter. Voir exemple pour plus d'info.
plt.contour(numpy.loadtxt('data.txt'))
contourf()
au lieu decontour()