mplotlib 3D surface plot erstellen
Verfasst: Mittwoch 25. Februar 2015, 13:29
hallo, ich habe erst vor einigen tagen mit python angefangen und sitze seit einiger zeit an einem code, um mehrere datensätze einzulesen und als 3d surface auszugeben. es handelt sich bei den datensätzen um spalten einer tabelle, die in eine liste eingetragen werden. da mehrere dateien eingelesen werden, werden diese listen nochmals in eine liste eingetragen, welche ich anschließend als 3d surface ausgeben möchte. es werden also zwei spalten aus mehreren dateien ausgelesen, welche dann jeweils die x und y koordinaten darstellen. die z koordinate ist dann der dateiname, wobei dieser durch eine aufsteigende zahl ersetzt wird. das problem ist (womöglich), dass die anzahl der werte in den spalten für jede datei unterschiedlich sind. das heißt, dass ich bspw. für "z=1" 20 werte für x und y habe, aber bei "z=2" nur 10 x und y werte.
ich habe zwei fragen:
1. ist es überhaupt möglich, aus solchen daten eine oberfläche zu generieren?
2. ich erhalte für den unten stehenden code folgende fehlermeldung:
File "C:\Python34\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 1620, in plot_surface
avgzsum = sum(p[2] for p in ps2)
TypeError: unsupported operand type(s) for +: 'int' and 'list'
Ich habe mir die axes3d.py angeguckt, aber werde da leider nicht draus schlau.
Danke schonmal für jede Hilfe!
ich habe zwei fragen:
1. ist es überhaupt möglich, aus solchen daten eine oberfläche zu generieren?
2. ich erhalte für den unten stehenden code folgende fehlermeldung:
File "C:\Python34\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 1620, in plot_surface
avgzsum = sum(p[2] for p in ps2)
TypeError: unsupported operand type(s) for +: 'int' and 'list'
Ich habe mir die axes3d.py angeguckt, aber werde da leider nicht draus schlau.
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
from os import path, chdir, listdir
import glob
mypath = path.join('c:','\\','path')
chdir (mypath)
Typ='*.dat'
Dateiinhalt=glob.glob(Typ)
Frliste=[]
Reliste=[]
Run=[]
Runliste=[]
for i in range(len(Dateiinhalt)):
Mo, Re, Fr = np.loadtxt(Dateiinhalt[i],skiprows=1,unpack=True)
Frliste.append(list(Fr))
Reliste.append(list(Re))
Run=[]
j=0
for j in range(len(Fr)): #dies dient dazu, ein array für die z koordinaten zu erstellen
Run.append(i+1)
Runliste.append(list(Run))
fig = plt.figure()
ax = fig.gca(projection='3d')
X = Frliste
Y = Reliste
Z = Runliste
X, Y = np.meshgrid(X, Y)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
linewidth=0, antialiased=False)
ax.set_zlim(0, 40)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()