/ / Matplotlib: Dessin des lignes de contour indépendantes de x et y - python, tableaux, numpy, matplotlib, contour

Matplotlib: tracer des lignes de contour indépendantes de x et y - python, tableaux, numpy, matplotlib, contour

J'essaie de tracer des courbes de niveau (élévation) associées aux coordonnées x et y. J'ai lu des exemples ici sur comment dessiner des contours sur Matplotlib quand z est défini par x et y, mais comment puis-je dessiner des lignes de contour indépendantes de x et y?

Ceci est mon code:

import numpy as np
import matplotlib.pyplot as plt

data = [(0, 200, 140), (100, 430, 260), (800, 340, 320), (250, 110, 430), (290, 40, 100), (590, 35, 180)]
x = np.arange(0, 900, 20)
y = np.arange(0, 500, 20)
X, Y = np.meshgrid(x, y)
Z = [i[2] for i in data]
Z = np.array(Z)
plt.figure()
plt.contour(X, Y, Z)
plt.show()

J'obtiens une erreur "TypeError: L'entrée z doit être un tableau 2D."

C'est la première fois que j'essaie de tracer des lignes de contour et j'apprécie toute aide à cet égard.

Réponses:

1 pour la réponse № 1

Étant donné qu'il n'y a que 6 points de données, un tracé de contour tiré de ceux-ci peut ne pas être très informatif. Pourtant, le concept serait le même pour plus de points.

Bien sûr, on ne peut pas tracer de courbes de niveau où x, y et z sont indépendants. Si vous avez 6 points z, vous avez besoin de 6 points x et de 6 points y - ce que vous avez. Donc, la solution peut être assez triviale - utilisez simplement tricontour au lieu de contour:

import numpy as np
import matplotlib.pyplot as plt

data = [(0, 200, 140), (100, 430, 260), (800, 340, 320),
(250, 110, 430), (290, 40, 100), (590, 35, 180)]
x,y,z = zip(*data)
plt.figure()
plt.tricontour(x,y,z)
plt.show()

entrer la description de l'image ici

Plus généralement, vous pouvez également interpoler vos données. Voir Faire le contour de dispersion.