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

Farb-Balkens

 

marco_lissabon
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2009, 15:28     Titel: Farb-Balkens
  Antworten mit Zitat      
Liebe Listers,


Ich nutze MatLab für die Darstellung der Höhenlinien eines vorgegebenen Skalarfelds, das das Ergebnis des numerischen Models ist, das ich derzeit für die Durchführung meiner Simulationen benutze.
Ich habe dabei ein Problem mit den Farbbalken und hoffe, dass mir jemand dabei helfen kann.

Kurze Beschreibung:
1-Koppelung des numerischen Models (um .dat -Ergebnisdatein herzustellen) mit MatLab (zur grafischen Ergebnisdarstellung)
2-Der Output des Models ist nicht feststehend, d. h. er führt die Entwicklung des Skalarfeldes mit der Zeit zurück  (Zeitfenster: 6 Stunden). Es ist wie ein Film mit vielen Einzelbildern.

Ich möchte die Linien des Skalarfeldes darstellen. Hierfür wird ein Farb-Balken verwendet.

Problembeschreibung:
(a) Der numerische Umfang des Farb-Balkens gleicht sich automatisch den höchsten (und niedrigsten) jeweiligen Zahlenwerten eines Bereiches für genau dieses Feld an (d.h. unmittelbar bei jedem t).
(b) Die Farben wechseln entsprechend.
(c) Rot steht beispielsweise für den höchsten Wert des Bereiches [t=1] und - dem widersprechend (aber rational) – wird Rot einem anderen (niedrigeren oder höheren) Wert des Bereiches [t=1+Dt=2] zugeordnet.


Frage:
(i) Wie kann ich einen festen, unveränderlichen numerischen Umfang/Bereich für die Farbbalken festlegen?

Könnte ich es wie folgt machen (**) :
-Einschätzung von Maximum und Minimum [der darzustellenden Parameter] eines Bereiches = [1: Ende]

-Festlegung der Intervalle der Farbbalken [min:max]

-Start der Animation

-Wie kann ich den Anhaltspunkt (**) MatLab vermitteln?




Ich bin für jeden Hinweis dankbar.
Vielen Dank im Voraus.
Liebe Gruesse aus Lissabon

Marco
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 01.04.2009, 19:50     Titel:
  Antworten mit Zitat      
Hallo Marco,

über einen Beispielcode, mit dem wir herumspielen können, würden wir uns sehr freuen.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
marco_lissabon
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2009, 12:30     Titel:
  Antworten mit Zitat      
Ja klar,Bijick ...sorry.

Der matlab file ,um die simulation mit meine daten zu laufen, ist leider zu "fett" (80 Mb) und es hier anzuhaengen geht leider nicht.

Der file (wavefiled.mat) ist hier erreichbar:
www.mydrive.ch
in der linken seite folgendes eingeben:
username: marco_lisbona
password: lissabon

Die liste besteht aus viele verschieden ordner.
Der richtige ordner ist: MatLab.de
damit kann man es herunterladen.

Danke !!!

Freundliche Grüße
Marco


Code:

close all
clc
 X=0.001*Xp_20081009_180000;
 Y=0.001*Yp_20081009_180000;
p=input('Enter pause (s) between each frame for animation:  ');

list=whos('-regexp','Hsig');
list.name;
cn={list.name};
cmp=@(c) strfind(c,'000000'); % Welche mussen umbenannt werden?
ind=find(~cellfun(@isempty,(cellfun(cmp,cn,'UniformOutput',false))));

for k=ind
    oldname=list(k).name;
    newname=regexprep(oldname,'000000','240000');
    eval([newname '=' oldname ';']);
    clear(oldname);
end


list=whos('-regexp','Hsig');
listT=whos('-regexp','Tm01');
listPx=whos('-regexp','Transp_x');
listPy=whos('-regexp','Transp_y');
listWx=whos('-regexp','Windv_x');
listWy=whos('-regexp','Windv_y');



for k = 1 : numel(list)
    eval(['data=' list(k).name ';']);
    eval(['dataT=' listT(k).name ';']);
    eval(['Px=' listT(k).name ';']);
    eval(['Py=' listT(k).name ';']);
    eval(['Wx=' listT(k).name ';']);
    eval(['Wy=' listT(k).name ';']);
   
    figure(1)
   subplot(2,2,1)
    contourf(X,-Y,data);
   
    colorbar
    %zlim([0 4])
    %title(list(k).name(11:16),'interpreter','none');
    title(['H_S for Day:',list(k).name(12:13), ' Hour: ',list(k).name(15:16)],'Color','r')
 
    xlabel('Easting on Lisboa Datum [km]')
    ylabel('Northing on Lisboa Datum [km]')
 
%  
    subplot(2,2,2)
    contourf(X,-Y,dataT);
   
    colorbar
    %zlim([0 4])
   title(['T_{m01} for Day:',list(k).name(12:13), ' Hour: ',list(k).name(15:16)],'Color','r')
    xlabel('Easting on Lisboa Datum [km]')
     xlim([0 200])
    %ylabel('Northing on Lisboa Datum [km]')
     

    pause(p)
   
 
end
 
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 02.04.2009, 14:23     Titel:
  Antworten mit Zitat      
Hallo Marco,

ganz so war das nicht gedacht. Mit Beispiel-Code war ein kurzer Code gemeint, der das von Dir beanstandete Verhalten zeigt, ohne sich in sonstigen Details zu verlieren. Immerhin konnte ich Deinem Code nun entnehmen, dass Du Grafiken von Höhenlinien mit contourf hast, wobei sich der Farbbalken, der mit dem Befehl colorbar erzeugt wird, in jedem Schritt verändert. Du möchtest für alle Grafiken denselben Farbbalken.

Ein lauffähiges Beispiel könnte also so aussehen:
Code:
figure
% Beispieldaten erzeugen
P = peaks;
% Grafik mit Farbbalken
contourf(P)
colorbar

figure
% Anderer Datensatz
P2 = 2*peaks;
% Grafik mit anderem Farbbalken
subplot(2,1,2)
contourf(P2)
colorbar


Dein Lösungsansatz war dann schon ganz richtig. Ich würde in einer Schleife die Daten erzeugen (data{1} bis data{numel(list)}), dann über alle data das Maximum und Minimum bestimmen und in einer weiteren Schleife die Grafiken erzeugen:

Code:
% Beispieldaten
data = cell(2,1);
for k = 1:2
    data{k} = k*peaks;
end

% Min und Max über alle Datensätze bestimmen
total_min = min(cellfun(@(x) min(x(:)),data));
total_max = max(cellfun(@(x) max(x(:)),data));

% Grafiken mit identischer colorbar dank caxis
for k = 1:2
    figure
    contourf(data{k})
    caxis([total_min,total_max])
    colorbar
    pause(1)
end


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
marco_lissabon
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2009, 15:44     Titel:
  Antworten mit Zitat      
Hallo Bijick,

ich bin sehr dankbar.
Die code ist sehr slicht und sehr sehr effektiv.

Danke auch fuer die schnelle antwort.
Ich wünsche dir ein tolles Wochenende!
Freundliche Grüße
Marco
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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 - 2024 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.