2016-04-07 9 views
1

Ich möchte glattes Konturdiagramm von X Y Z Matrix plotten.Smooth Contour Plot in Matlab

sf = fit([X Y] Z, 'poly23'); 
plot(sf); 

Ich habe nicht glatte Kurve enought .. Was ich brauche?

enter image description here

+0

Was ist Ihr X Y und Z? Es würde mehr helfen, wenn wir ein Beispiel für die Daten haben, die Sie versuchen zu plotten :) – Lincoln

+0

es ist eine Spalte von Daten. sie sind zu groß zum Anbringen :( Z ist eine Intensität an der Stelle (X, Y) – delkov

Antwort

1

können Sie die Funktionen nutzen wie griddata und csaps. Zusammen führen sie Sie zum Ergebnis so glatt wie Sie wünschen. Die erste Funktion fügt Ihrem Data Matrix Set zusätzliche Punkte hinzu. Die zweite macht das Ergebnis weicher. Das Beispiel des Codes ist unten. Im Beispiel erfolgt die Glättung zuerst in X-Richtung und dann in Y-Richtung. Versuchen Sie, mit den resolution und smoothing_parameter herumzuspielen (der aktuelle Satz dieser Parameter sollte jedoch in Ordnung sein).

x = min_x:step_x:max_x; 
y = min_y:step_y:max_y; 
resolution = 10; 

xg = min_x:(step_x/resolution):max_x; 
yg = min_y:(step_y/resolution):max_y; 
[X,Y] = meshgrid(x,y); 
[XG,YG] = meshgrid(xg,yg);  


smoothing_parameter = 0.02; 
fitted = griddata(X,Y,Z,XG,YG,'cubic'); 
fitted_smoothed_x = csaps(xg,fitted,smoothing_parameter,xg); 
fitted_smoothed_xy = csaps(yg,fitted_smoothed_x',smoothing_parameter,yg); 

surf(XG,YG,fitted_smoothed_xy'); 

EDIT: Wenn Sie nur ein Konturdiagramm erhalten möchten, können Sie tun, zum Beispiel, wie unten dargestellt. Da ich die echten Daten nicht habe, benutze ich die eingebaute Funktion peaks, um einige zu generieren.

[X,Y,Z] = peaks(30); 
figure 
surfc(X,Y,Z) 
view([0 90]) 
zlim([-10 -8]) 

Hier schauen Sie einfach bei Ihrem Konturplot von oben unter der Oberfläche zu sein.

+0

Danke! hp = surfc (...); set (hp (2), 'ShowText', 'on') – delkov

+0

aber ich brauche Grundstück konturieren. – delkov

+0

wie csaps auf Konturplot anwenden? – delkov