Il ne s'agit pas d'une solution générale, mais elle pourrait aider beaucoup de ceux qui ont tapé "matplotlib surface plot" dans Google et ont atterri ici.
Supposons que vous ayez data = [(x1,y1,z1),(x2,y2,z2),.....,(xn,yn,zn)]
alors vous pouvez obtenir trois listes 1-d en utilisant x, y, z = zip(*data)
. Maintenant, vous pouvez bien sûr créer un nuage de points 3d en utilisant trois listes 1-d.
Mais, pourquoi ne pas en général ces données peuvent-elles être utilisées pour créer un tracé de surface ? Pour comprendre cela, considérez un graphique 3-d vide :
Maintenant, supposons que pour chaque valeur possible de (x, y) sur une grille régulière "discrète", vous ayez une valeur z, alors il n'y a pas de problème et vous pouvez en fait obtenir un tracé de surface :
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
x = np.linspace(0, 10, 6) # [0, 2,..,10] : 6 distinct values
y = np.linspace(0, 20, 5) # [0, 5,..,20] : 5 distinct values
z = np.linspace(0, 100, 30) # 6 * 5 = 30 values, 1 for each possible combination of (x,y)
X, Y = np.meshgrid(x, y)
Z = np.reshape(z, X.shape) # Z.shape must be equal to X.shape = Y.shape
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
Que se passe-t-il lorsque vous n'avez pas obtenu z pour toutes les combinaisons possibles de (x, y) ? Alors, au point (à l'intersection des deux lignes noires sur le plan x-y du graphique ci-dessus), nous ne savons pas quelle est la valeur de z. Cela peut être n'importe quoi, nous ne savons pas à quel point notre surface devrait être "haute" ou "basse" à ce point (bien qu'elle puisse être approximée en utilisant d'autres fonctions), surface_plot
exige que vous lui fournissiez des arguments où X.shape = Y.shape = Z.shape).
10 votes
Voici quelques postes connexes/similaires/dupliqués : stackoverflow.com/q/3012783/3585557 , stackoverflow.com/q/12423601/3585557 , stackoverflow.com/q/21161884/3585557 , stackoverflow.com/q/26074542/3585557 , stackoverflow.com/q/28389606/3585557 , stackoverflow.com/q/29547687/3585557 .
0 votes
S'il vous plaît, commencez à étiqueter tous ces doublons surface et de fermer les doublons les uns dans les autres. Étiquette également numpy , maille pour celles qui concernent la génération de grilles de maillage.