WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Probleme mit contourf und griddata

 

DefMON
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: Germany
Version: ---
     Beitrag Verfasst am: 20.05.2014, 12:11     Titel: Probleme mit contourf und griddata
  Antworten mit Zitat      
Hallo zusammen,

da das hier mein erster Post ist, hoffe ich nichts übersehen zu haben.

Ich versuche schon seit einer gewissen Zeit einen 2D Plot von Messdaten mit contourf zu erzeugen. Dazu lese ich ein CSV-File ein und weisen dann verschiedenen Vektoren (hier X,Y,Z) einzelne Spalten der Datei zu.
Jetzt würde ich gerne Z als gefüllte Contour über X-Y darstellen.
Mein Code sieht dafür folgender Maßen aus:
Code:


        x_int=linspace(min(beam(:,1)),max(beam(:,1)),80);
        y_int=linspace(min(beam(:,2)),max(beam(:,2)),10)';

        [xm,ym] = meshgrid(beam(:,1),beam(:,2));

        % Dateninterpolation (anstatt griddata funktion)

        F1 = TriScatteredInterp(beam(:,1),beam(:,2),abs(beam(:,4)));
        zm=F1(xm,ym);

           
[x,y,z]=griddata(beam(:,1),beam(:,2),abs(beam(:,2)),x_int,y_int,'linear');

        T=figure;
        contourf(xm,ym,zm);

        P=figure;
        contourf(x,y,z);

 


Dabei habe ich in X-Richtung (beam(:,1)) teilweise bis zu 100 Schritte aufgenommen.
Bei beiden Methoden erhalte ich jedoch immer einen "gestückelte" Darstellung, obwohl ich eine mehr oder weniger kreisrunde Fläche erwarten würde.
Ich habe beide Plots einmal angehangen.

Für evtl. Anregungen wäre ich sehr dankbar!

Viele Grüße

Simon

griddata.jpg
 Beschreibung:
mit griddata

Download
 Dateiname:  griddata.jpg
 Dateigröße:  28.29 KB
 Heruntergeladen:  454 mal
Triplot.jpg
 Beschreibung:
erzeugt mit TriScattered

Download
 Dateiname:  Triplot.jpg
 Dateigröße:  41.3 KB
 Heruntergeladen:  447 mal
Private Nachricht senden Benutzer-Profile anzeigen


DefMON
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: Germany
Version: ---
     Beitrag Verfasst am: 22.05.2014, 15:14     Titel: Evtl. Datenformat eine Ursache
  Antworten mit Zitat      
Hallo zusammen,

kann es evtl. sein das ich bei dem Einlesen der Daten die Formatierung nicht richtig gemacht habe?
Eingelesen wird mit folgenden Zeilen:
Code:
[file, path]=uigetfile(['C:\Users\Documents\MATLAB\' '*.csv'], 1, 1);
data=([path, file]);
M=csvread(data,23);
t=size(M);
b=unique(M(:,3));
n=size(b);
aa=unique(M(:,2));
m=size(aa);
 


Ich weiß das auf diese Weise meine Intensität nur ein Zeilenvektor (nx1) ist. Daher verwende ich die Interpolationen.

Vielleicht hatte jemand schon einmal damit Probleme.

Viele Grüße

Simon
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.05.2014, 15:17     Titel:
  Antworten mit Zitat      
Hallo,

kannst du eine Beispieldatei zur Verfügung stellen? Dann könnten wir leichter beurteilen, ob das Problem am Import liegt und wenn nicht: woran.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DefMON
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: Germany
Version: ---
     Beitrag Verfasst am: 22.05.2014, 15:43     Titel:
  Antworten mit Zitat      
Hallo Harald,

gerne!
Anbei mal eine Beispieldatei. Zur besseren Übersicht hab ich nur ein paar Zeilen angehangen, aber sonst nichts geändert.

Viele Grüße

Simon

P.S.: Musste es leider packen, da .csv nicht erlaubt war

read_in.rar
 Beschreibung:

Download
 Dateiname:  read_in.rar
 Dateigröße:  575 Bytes
 Heruntergeladen:  364 mal


Zuletzt bearbeitet von DefMON am 22.05.2014, 15:45, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.05.2014, 15:45     Titel:
  Antworten mit Zitat      
Hallo,

keine Beispieldatei da.
Nicht vergessen, nach dem Auswählen der Datei auf "Datei anhängen" zu klicken.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DefMON
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: Germany
Version: ---
     Beitrag Verfasst am: 22.05.2014, 15:46     Titel:
  Antworten mit Zitat      
Jetzt sollte es geklappt haben. Hatte beim ersten Mal das mit der Dateiendung nicht gesehen.

Viele Grüße

Simon
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.05.2014, 15:53     Titel:
  Antworten mit Zitat      
Hallo,

und wie muss man nun die Einleseroutine und den ursprünglich geposteten Code miteinander verknüpfen?
Bitte möglichst ein komplettes Beispiel zur Verfügung stellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DefMON
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: Germany
Version: ---
     Beitrag Verfasst am: 22.05.2014, 16:08     Titel:
  Antworten mit Zitat      
Hallo Harald,

entschuldige bitte. Wenn man es selbst erstellt hat sieht man sowas nicht Smile

Folgend dann mal das komplette Skript

Code:

clear all
close all
[file, path]=uigetfile(['C:\Users\Documents\MATLAB\' '*.csv'], 1, 1);

data=([path, file]);
M=csvread(data,23);
t=size(M);
b=unique(M(:,3)); % Prüfen ob versch. Z-Werte
n=size(b);
aa=unique(M(:,2));
m=size(aa);

% Ab hier soll geprüft werden, ob versch. Z-Werte vorhanden sind, da je die Plots für einen Z-Wert erstellt werden sollen

for i=1:n(1)
% Positionen der versch. Z-Werte in der Datei um Einlesebereich zu definieren
I_u=find(M(:,3)==b(i),1, 'first');
I_o=find(M(:,3)==b(i),1, 'last');

test=isempty(I_u);

            if test==0
                steps=I_o-I_u;
            part=linspace(I_u,I_o-1,I_o-I_u);
% mehrere Z-Werte gefunden? Dann wird nur jeweils ein Teil von M in beam gespeichert
            beam=(M(part,:));
            for j=1:m
                    Index_unten=find(M(:,2)==aa(j),1, 'first');
                    Index_oben=find(M(:,2)==aa(j),1, 'last');
                    ZZ=zeros([Index_oben-Index_unten+1],m(1));
                    ZZ(:,j)=M([Index_unten:Index_oben],4);
                end
            else
            beam=M;
                for j=1:m
                    Index_unten=find(M(:,2)==aa(j),1, 'first');
                    Index_oben=find(M(:,2)==aa(j),1, 'last');
                    ZZ(:,j)=M([Index_unten:Index_oben],4);
                end    
            end
        leer=find(beam(:,4)>-10);
        z=beam(:,4);
%         z(leer)= 0;
       
        x_int=linspace(min(beam(:,1)),max(beam(:,1)),80);
        y_int=linspace(min(beam(:,2)),max(beam(:,2)),10)';
        % [X,Y,Z]=meshgrid(beam(:,1),beam(:,2),beam(:,4));
        % Erzeugen des Mesh - arrays
        [xm,ym] = meshgrid(beam(:,1),beam(:,2));

        % Dateninterpolation (anstatt griddata funktion)
        F1 = TriScatteredInterp(beam(:,1),beam(:,2),abs(z));
        um1=F1(xm,ym);
        [x,y,z]=griddata(beam(:,1),beam(:,2),abs(z),x_int,y_int,'linear');

        T=figure;
        contourf(xm,ym,um1);

        P=figure;
        contourf(x,y,z);
       
end
 


Ich hoffe es ist einigermaßen übersichtlich.

Viele Grüße

Simon
Private Nachricht senden Benutzer-Profile anzeigen
 
DefMON
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: Germany
Version: ---
     Beitrag Verfasst am: 26.05.2014, 18:05     Titel:
  Antworten mit Zitat      
Hallo zusammen,

mir ist aufgefallen, dass in meiner Datei sich die Werte für X und Y wiederholen, da diese mehrfach abgetastet werden.
Jedoch bleibt der Plot auch "streifig", wenn ich vorher eine Mittelwertbildung durchführe, sodass jeweils für jede Position nur ein Wert für X,Y und Z übergeben werden.

Leider habe ich also noch immer keine Idee woran es eigentlich scheitert.

Viele Grüße

Simon
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.05.2014, 18:17     Titel:
  Antworten mit Zitat      
Hallo,

sorry - ich hatte diesen Thread aus den Augen verloren.

Ich würde dich bitten, einen größeren Datensatz anzuhängen. Dieser hat nach Elimination doppelter Datenpunkte nur vier Datenpunkte, und da kann man einfach kein vernünftiges Bild erwarten.

Eine Möglichkeit ist, dass der Renderer das Problem macht. Probiere
Code:
set(gcf, 'Renderer', ...)

mit drittem Argument zbuffer oder opengl.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DefMON
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: Germany
Version: ---
     Beitrag Verfasst am: 26.05.2014, 18:30     Titel:
  Antworten mit Zitat      
Hallo Harald,

anbei mal eine vollständige Datei. Es sind Messungen für zwei Ebenen, also als Ergebnis hoffte ich zwei Plots zu erzeugen.

Ich habe im Figure-Befehl, also nach contourf(...)

Code:
set(gcf, 'Renderer', ...)
 


mit beiden Varianten probiert, es hat sich aber leider keine Besserung eingestellt.

Vielen Dank nochmals!

Grüße

Simon

140519_test_dot.rar
 Beschreibung:

Download
 Dateiname:  140519_test_dot.rar
 Dateigröße:  45.36 KB
 Heruntergeladen:  361 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.05.2014, 19:01     Titel:
  Antworten mit Zitat      
Hallo,

ich habe folgende Zeile angepasst, weil mir sonst der Speicher überläuft:
Code:
[xm,ym] = meshgrid(unique(beam(:,1)),unique(beam(:,2)));


Für mich sind die Visualisierungen nach Ansicht der Daten im Bereich dessen, was zu erwarten ist. griddata produziert dabei die optisch ansprechenderen Ergebnisse.

Du könntest höchstens noch nachsehen, ob die interpolierten Werte jeweils mit dem übereinstimmen, was angesichts der Werte im Umfeld zu erwarten ist. Es würde mich aber sehr wundern, wenn dem nicht so wäre.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.