Meshgrid RuntimeError: In initialize: Triangulation is invalid

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Thommy
User
Beiträge: 4
Registriert: Sonntag 23. April 2017, 11:50

Hallo zusammen,

ich versuche derzeit eine 3D Messung mittels eines Meshgrids auszuwerten. Wenn ich die Daten das erste Mal einlese und mir darstellen lasse, klappt alles ganz wunderbar. Anschließend versuche ich mir einen zweites Meshgrid mit nur der Hälfte der Daten auszuwerten und versuche, dann nur die Daten zu übernehmen, die in der unteren Hälfte des y-Bereiches sind. Leider kommt dann der Fehler zur lezten Zeile: RuntimeError: In initialize: Triangulation is invalid

Hier mal mein Code:

Code: Alles auswählen

#Aus txt Daten x,y,z wird eine RSM erstellt
#Uli Tromm







from __future__ import unicode_literals     #Importieren der libraries
import os
import matplotlib
matplotlib.rcParams['text.usetex'] = True
matplotlib.rcParams['text.latex.unicode'] = True
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import sympy as sy
from pylab import griddata
from matplotlib.ticker import FuncFormatter
from matplotlib import colors


allfolders=os.listdir()

for item in allfolders:
    if item.find ('.txt') !=-1 and item.find('RSM') !=-1:
        txtfile=item

Daten=np.genfromtxt(txtfile,dtype=str)
def func(x):
    return float(x.replace(',','.'))

func_vec=np.vectorize(func)
Daten=func_vec(Daten)

with open ('Versuch.txt','wb') as f:
    np.savetxt(f,Daten,fmt='%7.6g', delimiter='\t')

x_dat=Daten[0:,0]
y_dat=Daten[0:,1]
z_dat=Daten[0:,2]

N_x, N_y = 256, 256
x = np.linspace(x_dat.min(), x_dat.max(), N_x)
y = np.linspace(y_dat.min(), y_dat.max(), N_y)
xx, yy = np.meshgrid(x, y)
z_dat = np.clip(z_dat, 1, z_dat.max())
gridded_data = griddata(x_dat, y_dat, z_dat, xx, yy, interp='linear')
fig, axis = plt.subplots()
a_x = (x_dat.max() - x_dat.min()) / N_x
a_y = (y_dat.max() - y_dat.min()) / N_y
im = axis.imshow(gridded_data, origin='lower', interpolation='none',
                 norm=colors.LogNorm())
ff_x = FuncFormatter(lambda x, pos: '{:.3g}'.format((x * a_x) + x_dat.min()))
ff_y = FuncFormatter(lambda y, pos: '{:.3g}'.format((y * a_y) + y_dat.min()))
axis.xaxis.set_major_formatter(ff_x)
axis.yaxis.set_major_formatter(ff_y)
cb = plt.colorbar(im)
plt.xlabel('q \u2225')
plt.ylabel('q \u22A5')
plt.savefig('RSM.jpg', format='jpg', dpi=1000)
plt.show()



y_hälfte=((max(y_dat)-min(y_dat))/2)+min(y_dat)


x_li=[]
y_li=[]
z_li=[]

for count, elem in enumerate(y_dat):
    if elem < y_hälfte:
        Loc_elem= count
        x_li.append(x_dat[Loc_elem])
        y_li.append(y_dat[Loc_elem])
        z_li.append(z_dat[Loc_elem])

x_limit=np.asarray(x_li)
y_limit=np.asarray(y_li)
z_limit=np.asarray(z_li)

N_x, N_y = 256, 256
x = np.linspace(x_limit.min(), x_limit.max(), N_x)
y = np.linspace(y_limit.min(), y_limit.max(), N_y)
xx, yy = np.meshgrid(x, y)
gridded_data = griddata(x_limit, y_limit, z_limit, xx, yy, interp='linear')

Vielen Dank,
Thommy
Zuletzt geändert von Anonymous am Dienstag 2. Mai 2017, 14:00, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Ich glaube nicht, dass Dir hier jemand so weiterhelfen kann:
  • Dein Skript läuft nur bei Dir, weil die Messdaten fehlen.
  • Das Skript ist zu lang, um den Fehler durch bloses hinschauen zu finden
Folgendes würde ich Dir empfehlen:
  • Kürze das Skript, lösche alles was nichts mit dem Fehler zu tun hat
    • 7 Leerzeilen am Anfang
    • LaTeX Spielereien
    • Suchen und Finden der Messdatei (Zeile 26-28)
    • Zeile 37-38
    • FuncFormatter
    • und noch viel mehr
  • Erzeuge eine möglichst kleine Messdatei, mit der der Fehler gerade noch auftritt und poste diese auch.
  • Benutze keine Umlaute in Variablennamen (y_hälfte)
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten