Plot von Punkten in 3 Dimensionen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Monadic512
User
Beiträge: 1
Registriert: Samstag 23. Mai 2015, 11:41

Hallo!

ich habe ein Problem mit dem Plotten durch MatPlotLib. Es geht dabei um einen 3D-Plot, wobei alle Werte gegeben sind also Punkte P(x, y, z).

Der 3D-Plot mit einer Funktion funktioniert wunderbar:

Code: Alles auswählen

from mpl_toolkits.mplot3d import Axes3D

from matplotlib import cm

from matplotlib.ticker import LinearLocator, FormatStrFormatter

import matplotlib.pyplot as plt

import numpy as np


fig = plt.figure()

ax = fig.gca(projection='3d')

X = np.arange(-5, 5, 0.25)

Y = np.arange(-5, 5, 0.25)

X, Y = np.meshgrid(X, Y)

Z = X*X + Y*Y
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
 linewidth=0, antialiased=False)

ax.set_zlim(-10, 10)


ax.zaxis.set_major_locator(LinearLocator(10))

ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))


fig.colorbar(surf, shrink=0.5, aspect=5)


plt.show()

Wenn ich jetzt allerdings die z-Werte nicht aus x und y berechne, sondern einlesen will, wird nichts angezeigt.
Der nicht-funktionierende Code ist der folgende:

Code: Alles auswählen

from mpl_toolkits.mplot3d import Axes3D

from matplotlib import cm

from matplotlib.ticker import LinearLocator, FormatStrFormatter

import matplotlib.pyplot as plt

import numpy as np


fig = plt.figure()

ax = fig.gca(projection='3d')


X, Y, Z = np.loadtxt('DATA.txt', unpack=True)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
 linewidth=0, antialiased=False)

ax.set_zlim(0, 1)


ax.zaxis.set_major_locator(LinearLocator(10))

ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))


fig.colorbar(surf, shrink=0.5, aspect=5)


plt.show()

Wenn es mit x- und y-werten und dann z = x*x + y*y klapp, muss es ja auch irgendwie klappen, wenn man die z-Werte zusätzlich einliest.

Weiß jemand, wo der Fehler liegt bzw. wie man solche Punkte mit P(x, y, z) plotten kann ?


Danke im Voraus für eine Antwort und Freundliche Grüße
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

erfüllen Deine Daten die Voraussetzungen für plot_surface? Dann mußt Du sie noch auf ein reguläres 2d-Gitter reshapen. Sonst mußt Du sie triangulieren und mit plot_trisurf darstellen.
Antworten