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

mesh: Werte größer Null rot markieren?

 

cordoba
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2014, 12:18     Titel: mesh: Werte größer Null rot markieren?
  Antworten mit Zitat      
Hallo,

in meinem mesh interessieren mich eigentlich nur zwei Datenbereiche: Werte kleiner gleich Null und Werte größer Null. Wie kann man die Farben an die numerischen Werte knüpfen? Geht das über colormap?

Hier ein Minimalbsp. aus der Matlab-Hilfe:

Code:
figure;
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(Z);
view([0 90]);


Liebe Grüße

cordoba
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 18.02.2014, 16:35     Titel:
  Antworten mit Zitat      
hmm mit colormap weis ich grade nicht.
das wäre meine idee dazu gewesen:
Code:
figure;
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
m1=Z;
m1(m1<0)=nan;
m2=Z;
m2(m2>=0)=nan;
hold on
mesh(m1,'EdgeColor','blue');
mesh(m2,'EdgeColor','red');
view([0 90]);

allerdings hast du dann die flächen nicht miteinander verbunden. vieleicht giebts dir aber ne anregung
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.02.2014, 22:44     Titel:
  Antworten mit Zitat      
Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 20.02.2014, 08:57     Titel:
  Antworten mit Zitat      
Hallo,

mesh() hat auch als Eingabeargument die Möglichkeit, direkt eine Matrix für die Farbwerte anzugeben.
Das ginge dann z.B. so:
Code:
figure;
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;

% Farbmatrix
C = zeros(size(Z));
C(Z<0) = 1;

mesh(X,Y,Z,C);
colormap(jet(4)) % deutlichere Farben
 

Das gibt dann auch nicht diese weissen/leeren Stellen zwischen den Farbübergängen. Aber falls du die vielleicht sogar übersichtlich findest, also gut gebrauchen kannst, dann musst du ja nicht tauschen Smile

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.02.2014, 09:31     Titel:
  Antworten mit Zitat      
Ja, das sieht super aus! Danke!

Eine Frage: Kann man den Farbverlauf von mesh ab einem gewissen numerischen Wert starten? Also z.B. hier ab größer Null? Unterhalb ist z.B. nur schwarz/weiß Gitter und ab größer Null (oder gleich Null wäre auch ok) fängt der normale mesh-Farbverlauf an...?

Liebe grüße

cordoba
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 20.02.2014, 10:08     Titel:
  Antworten mit Zitat      
Hallo,

das könnte wohl so funktionieren:
Code:
% Farbmatrix
C=max(Z,0);

Alle Werte unterhalb von 0 werden auf 0 gesetzt und kriegen damit dieselbe Farbe. Ansonstne ist die Farbe entsprechend des Wertes in Z gesetzt.

Aber wenn ich nur das eingebe, wird das Bild noch nicht direkt schön ersichtlich. da musst vielleicht mit der colorbar an sich noch etwas rumspielen. Etwas deutlicher wird das ganze, wenn du surf() statt mesh() probierst.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2014, 12:31     Titel:
  Antworten mit Zitat      
Danke für den Hinweis. surf sieht wirklich besser aus. Das einzige was mir noch nicht so gut gefällt ist die rote Farbe bei kleiner Null:

Code:

clf;
[X,Y] = meshgrid(-2:.05:2);
Z = exp(-X.^2 - Y.^2)-.5
C=max(Z,0);
C(Z<0) = 1;
surf(X,Y,Z,C)
view([45 45])
 


Oder ist das ok? Hat jemand eine andere Idee? Sollte man die Felder kleiner Null vielleicht heller machen? Ein helles rot? Das soll dann in ein Latexdokument eingefügt werden....

Liebe Grüße

cordoba
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 24.02.2014, 11:06     Titel:
  Antworten mit Zitat      
Hallo,

diese Zeile
Code:
C(Z<0) = 1;

brauchst du gar nicht mehr, bzw die solltest du auch entfernen. Andernfalls kriegen die Werte <0 die Farbe für den Wert 1. Das ist dann kein fließender Übergang mehr.
Die Zeile
Code:
sorgt nämlich genau dafür. Alle Werte unterhalb von 0 bekommen die Farbe für den Wert 0, alle anderen Farben werden entsprechend des Werts in Z gesetzt.

Wenn dir das Ergebnis dann gut genug gefällt, bist du fertig. Ansonsten kannst du dir eine andere der vorgefertigten colormaps mit "colormap" ansehen und aussuchen. Falls nichts passendes dabei ist, kannst du auch deine eigene Colormap erstellen und die Farben nach deinen Vorstellungen verteilen.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2014, 15:14     Titel:
  Antworten mit Zitat      
Nras hat Folgendes geschrieben:

Falls nichts passendes dabei ist, kannst du auch deine eigene Colormap erstellen und die Farben nach deinen Vorstellungen verteilen.


Hallo und danke erstmal. Konnte mich leider nicht früher melden.

Bin mit dem Ergebniss noch nicht ganz zufrieden. Ich hätte gern, dass der klassische Farbverlauf erst bei größer Null anfängt. Unterhalb soll das surf einfach nur weiß mit schwarzen Gitterlinien sein. Ich komm mit google nicht weiter. Wie kann man denn so eine colormap erstellen?

Hier nochmal das Minimalbsp:

Code:
clf;
[X,Y] = meshgrid(-2:.05:2);
Z = exp(-X.^2 - Y.^2)-.5
C=max(Z,0);
surf(X,Y,Z,C)
view([45 45])


Liebe Grüße

cordoba
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 04.03.2014, 15:29     Titel:
  Antworten mit Zitat      
Hallo,

wenn du nur die Farbe für den kleinsten Wert (also hier für 0 in der Matrix C) ändern willst, dann so:
Code:
cmap = colormap();
cmap(1,:) = [1,1,1];    % weiss für ersten Wert
colormap(cmap)


Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2014, 21:27     Titel:
  Antworten mit Zitat      
Danke!
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.