3D Surface Plot aus drei Listen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
tim1175
User
Beiträge: 5
Registriert: Donnerstag 21. Mai 2020, 14:32

Guten Tag,

ich bemühe mich, aus Messwerten einen 3D Surface Plot zu erstellen. Hierzu habe ich zunächst aus dem Internet eine coole Funktion herausgesucht und mir aus jener x-, y- und z-Werte generiert. Diese Werte lese ich jeweils aus einer txt Datei aus und hinterlege Sie separat in Listen (x: x_Werte, y: y_Werte, z: z_Werte)
Nun habe ich mit den Werten der x_Werte und y_Werte ein Meshgrid erzeugt und fortlaufend dann mit den Werten aus z_Werte einen 3D Surface Plot erzielt.
Nun sieht diese Oberfläche ganz und gar nicht der ähnlich, die sie eigentlich darstellen soll...

Da mein Erfahrung recht gering ist, wollte ich euch um Hilfe bitte, was mein Fehler ist:)

(ganz unten werde ich euch - falls nötig - die Werte der Listen einfügen)

Der relevante Teil meines Skripts ist folgender:

Code: Alles auswählen

import numpy as np
import tkinter as tk
from scipy.stats import linregress
import sys
import scipy.interpolate as interp
import matplotlib.pyplot as plt

x_Werte=[]
y_Werte=[]
z_Werte=[]

# durch Auslesen der txt werden den Listen Werte eingefügt

x=x_Werte
y=y_Werte
                
X,Y,=np.meshgrid(x,y)
                
#print("X= ") 
#print(X) 
#print("Y = ") 
#print(Y) 
                
Z = interp.griddata((x_Werte,y_Werte),z_Werte,(X,Y))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X,Y,Z,cstride=1,rstride=1)
plt.show()

Die Funktion, die dahintersteckt ist ein Helix: http://www.tm-mathe.de/CanvasGI/c_matharea.html

(Das Bild meines Plots kann ich hier ja nicht anzeige, da es nicht im Internet verfügbar ist. Allerdings sieht es auch, wie eine aus Wut zusammengeknüllte Papierkugel)

Hier nun die Werte meiner Listen:

Code: Alles auswählen

x_Werte=[-0.0, -0.0, -0.0, 0.0, 0.0, 0.0, -0.0, -0.0, -0.0, 0.0, 0.0, 0.0, -0.0, -0.0, -0.0, 0.0, 0.0, 0.0, -0.0, -0.0, -1.6781430581529049, -1.8222605237693539, -0.2910000676172271, 1.5078045086866092, 1.920340573300732, 0.5673243709264525, -1.3072872417272239, -1.9799849932008908, -0.8322936730942848, 1.0806046117362795, 2.0, 1.0806046117362795, -0.8322936730942848, -1.9799849932008908, -1.3072872417272239, 0.5673243709264525, 1.920340573300732, 1.5078045086866092, -0.2910000676172271, -1.8222605237693539, -3.3562861163058098, -3.6445210475387078, -0.5820001352344542, 3.0156090173732184, 3.840681146601464, 1.134648741852905, -2.6145744834544478, -3.9599699864017817, -1.6645873461885696, 2.161209223472559, 4.0, 2.161209223472559, -1.6645873461885696, -3.9599699864017817, -2.6145744834544478, 1.134648741852905, 3.840681146601464, 3.0156090173732184, -0.5820001352344542, -3.6445210475387078, -5.034429174458714, -5.466781571308061, -0.8730002028516812, 4.523413526059827, 5.761021719902196, 1.7019731127793576, -3.921861725181672, -5.939954979602673, -2.4968810192828546, 3.2418138352088386, 6.0, 3.2418138352088386, -2.4968810192828546, -5.939954979602673, -3.921861725181672, 1.7019731127793576, 5.761021719902196, 4.523413526059827, -0.8730002028516812, -5.466781571308061, -6.7125722326116195, -7.2890420950774155, -1.1640002704689083, 6.031218034746437, 7.681362293202928, 2.26929748370581, -5.2291489669088955, -7.919939972803563, -3.3291746923771393, 4.322418446945118, 8.0, 4.322418446945118, -3.3291746923771393, -7.919939972803563, -5.2291489669088955, 2.26929748370581, 7.681362293202928, 6.031218034746437, -1.1640002704689083, -7.2890420950774155]

y_Werte=[0.0, -0.0, -0.0, -0.0, 0.0, 0.0, 0.0, -0.0, -0.0, -0.0, 0.0, 0.0, 0.0, 0.0, -0.0, -0.0, -0.0, 0.0, 0.0, 0.0, 1.0880422217787395, -0.8242369704835132, -1.9787164932467636, -1.3139731974375781, 0.5588309963978517, 1.917848549326277, 1.5136049906158564, -0.2822400161197344, -1.8185948536513634, -1.682941969615793, 0.0, 1.682941969615793, 1.8185948536513634, 0.2822400161197344, -1.5136049906158564, -1.917848549326277, -0.5588309963978517, 1.3139731974375781, 1.9787164932467636, 0.8242369704835132, 2.176084443557479, -1.6484739409670264, -3.957432986493527, -2.6279463948751562, 1.1176619927957034, 3.835697098652554, 3.027209981231713, -0.5644800322394689, -3.637189707302727, -3.365883939231586, 0.0, 3.365883939231586, 3.637189707302727, 0.5644800322394689, -3.027209981231713, -3.835697098652554, -1.1176619927957034, 2.6279463948751562, 3.957432986493527, 1.6484739409670264, 3.2641266653362186, -2.4727109114505397, -5.9361494797402905, -3.9419195923127344, 1.6764929891935552, 5.7535456479788305, 4.540814971847569, -0.8467200483592032, -5.45578456095409, -5.048825908847379, 0.0, 5.048825908847379, 5.45578456095409, 0.8467200483592032, -4.540814971847569, -5.7535456479788305, -1.6764929891935552, 3.9419195923127344, 5.9361494797402905, 2.4727109114505397, 4.352168887114958, -3.2969478819340527, -7.914865972987054, -5.2558927897503125, 2.235323985591407, 7.671394197305108, 6.054419962463426, -1.1289600644789377, -7.274379414605454, -6.731767878463172, 0.0, 6.731767878463172, 7.274379414605454, 1.1289600644789377, -6.054419962463426, -7.671394197305108, -2.235323985591407, 5.2558927897503125, 7.914865972987054, 3.2969478819340527]

z_Werte=[-2.5, -2.25, -2.0, -1.75, -1.5, -1.25, -1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, -2.5, -2.25, -2.0, -1.75, -1.5, -1.25, -1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, -2.5, -2.25, -2.0, -1.75, -1.5, -1.25, -1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, -2.5, -2.25, -2.0, -1.75, -1.5, -1.25, -1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, -2.5, -2.25, -2.0, -1.75, -1.5, -1.25, -1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25]

Vielen herzlichen Dank!
tim1175
User
Beiträge: 5
Registriert: Donnerstag 21. Mai 2020, 14:32

ich möchte noch anfügen, wie ich die Werte der Listen erhielt:

Code: Alles auswählen


import numpy as np


x_Werte=[]
y_Werte=[]
z_Werte=[]
### Schrauben 3d Funktion

for u in range (0,10,2):
    for v in range (-10,10,1):
        x=u*np.cos(v)
        y=u*np.sin(v)
        z = 0.25*v
        
        x_Werte.append(x)
        y_Werte.append(y)
        z_Werte.append(z)
        
        print(x,',', y,',', z)
        
print('x_Werte:',x_Werte)
print('y_Werte:',y_Werte)
print('z_Werte:',z_Werte)

bas_oldy
User
Beiträge: 16
Registriert: Donnerstag 23. August 2018, 20:09

Hallo tim,

dass deine Grafik nicht so aussieht wie die aus dem von dir angegebenen link liegt vermutlich daran, dass du andere Bereiche und andere Schrittweiten verwendest. Im link läuft u von 1 bis 3 in 10 Schritten und v von -4*pi bis 4*pi in 200 Schritten. Bei dir sind es 5 Schritte für u von 0 bis 8 und 20 für v von -10 bis 9. Ich vermute, dass die Grafik eher deinen Erwartungen entspricht, wenn du das berücksichtigst.

bas_oldy
Antworten