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()
Plus généralement, vous pouvez également interpoler vos données. Voir Faire le contour de dispersion.