Seite 1 von 1

3D Surface Plot aus drei Listen

Verfasst: Samstag 23. Mai 2020, 13:36
von tim1175
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!

Re: 3D Surface Plot aus drei Listen

Verfasst: Samstag 23. Mai 2020, 14:07
von tim1175
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)


Re: 3D Surface Plot aus drei Listen

Verfasst: Sonntag 24. Mai 2020, 19:25
von bas_oldy
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