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

Farbprobleme mit der Legende

 

seppl123
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 06.07.08
Wohnort: Stuttgart
Version: 7.4.0
     Beitrag Verfasst am: 06.07.2008, 09:38     Titel: Farbprobleme mit der Legende
  Antworten mit Zitat      
Hallo,

ich arbeite seit ca. einer Woche mit Matlab und habe ein erstes Skript geschrieben, welches mir Messdateien automatisch auswertet.

Zu Beginn dieses Skripts habe ich die Abfrage eingebaut, wieviele Messungen gemacht wurden. Darauf folgt dann eine for-Schleife bis zur letzten Messung (Berücksichtigung der Eingabe vom Nutzer).

Jetzt stellt sich mir folgendes Problem. Die for-Schleife wird mehrmals durchlaufen und jedesmal eine andere Messdatei eingelesen, ausgewertet und geplottet (ins selbe Diagramm!).

Ich füge am Ende jedesmal mit einer IF-Scleife die Legende hinzu. Dabei tritt aber dann folgendes Problem auf. Die Farben der Graphen stimmen nicht mit den Legendeneinträgen überein. Ich habe den entsprechenden Skript Teil mal hier mit gepostet. Unten stehen dann meine Fragen dazu.

Code:
for ***

hold on;                           % Plotten der Funktion
if n == 0; plot(frequenz,Uebertrfunktion,´b´);end
if n == 5; plot(frequenz,Uebertrfunktion,´g´);end
if n == 10; plot(frequenz,Uebertrfunktion,´y´);end
.
.
.
 
xlabel('Frequenz [Hz]');                                
ylabel('Übertragungsfunktion der Geschwindigkeit [m/s / V]');   % beschriftet y-Achse
if n == 0; y_max = Uebertrfunktion + 0.005; AXIS([35000 55000 0 max(y_max)]);end

% title('Diagramm');  
grid on;                    
 
.
.
.
if n == 10; legend off; legend('1 Volt','5 Volt','10 Volt',1);end          
if n == 5; legend('1 Volt','5 Volt',1);n=n+5;end
if n == 0; legend('1 Volt',1);n=n+5;end      

end



Jetzt zu meinen Fragen:
1. Kann jemand erkennen warum das nicht klappen kann mit den Farbeinträgen? Ich habe das Gefühl, dass ihm die IF-Schleifen Probleme machen.
2. Kann man die Farben der Legndenbeschriftung manuell verändern?
3. Wenn ja wie lautet der Befel dazu.

PS: Das Skript ist bestimmt nicht genial, aber denkt daran, dass ich absoluter Newbie bin und mich erst seit wenigen Tagen mit Matlab beschäftige! Danke!

Edit by Martin: Ich habe mal freundlicherweise die Code-Formatierung eingefügt Smile
Private Nachricht senden Benutzer-Profile anzeigen


dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2008, 11:40     Titel:
  Antworten mit Zitat      
Hallo,

versuch doch mal hier im Forum den SourceCode in eine Code-Umgebung zu verpacken. Einfach auf den "Code"-Button drücken oder das Label manuell setzen. Das macht das ganze etwas übersichtlicher.

Ich versuche mal generell an deinem Code was zu beanstanden: Smile

Läuft die for-Schleife mit n als Laufvariable? Du inkrementierst die nämlich etwas später um 5, das wird aber schon mal nicht ausgeführt (bzw. beim nächsten Durchgang wieder auf n+1 gesetzt.

Um mehrere if-Anweisungen nacheinander zu vermeiden, gibt es den switch-Befehl. Der könnte der Übersichtlichkeit dienen.

Falls du wirklich nur die Farbe in den Plot ändern willst, würde ich das eher so machen:
Code:
[...]
% daten plotten
p = plot(...);
% Farbe ändern
switch(n)
case 0,
set(p,'Color',Farbe1)
[...]
end;


M.E. ist das
Code:
überflüssig, da bei neuen Plots die Legende automatisch entfernt wird.


Das hier funktioniert bei mir:
Code:
for i=1:3
% plotte Daten
p=plot(rand(100,i));
% Ändere Farbe und füge Legende ein
switch(i)
case 1,
set(p,'Color','g');
legend('Hallo');
case 2,
set(p,'Color','b');
legend({'Hallo' 'Welt'});
case 3,
set(p,'Color','y');
legend({'Hallo' 'Welt' ':)'});
end
% kurze Pause
pause(1)
end


Wobei mir natürlich der Nutzen einer Legende bei nur gleichfarbigen Plots fern bleibt.

Explizit zu deinen Fragen:
1. Ich weiss es nicht genau - scheint auf dem ersten Blick eigentlich nix zu beanstanden zu geben. Entweder die if-Anweisung, das Inkrementieren der Laufvariablen in einer for-Schleife, der zusätzliche Parameter im legend-Befehl (was bewirkt die 1 am Ende denn?) oder .. naja, was anderes halt Smile - sorry.
2. Mh, ohne es genau zu wissen sage ich mal nein. Das würde auch den Sinn einer Legende in Frage stellen. Die Farbe der Legende passt sich automatisch der Farbe des Plots an - auch bei selbstbeschworenen Farbänderungen.
3.
Code:
figure;
p=plot(rand(100,1));
l = legend('Hallo Welt');
get(l)
Nun siehst du alle möglichen "Einstellungsmöglichkeiten" für die Legende. Das Feld "Color" ändert z.B. die Hintergrundfarbe der Legende.

Ich hoffe ich konnte dir dennoch ein bisschen helfen Smile

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
seppl123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 06.07.08
Wohnort: Stuttgart
Version: 7.4.0
     Beitrag Verfasst am: 07.07.2008, 13:38     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort und danke für das Einfügen des Codes!

Bei der for Schleife läuft n als Variable und zwar wie folgt:

Code:


wobei ich s als 5 definiert hab und u der angesprochene Eingabewert ist.
Das Hochzählen von n ist wahrscheinlich überflüssig? Das macht die for-Schleife wahrscheinlich automatisch, oder?

Den switch Befehl kannte ich noch nicht. Vielen Dank dafür.

Leider meinte ich etwas anderes. Bei dir ändert sich die Farbe des Plots plus Legende.

Ich werte mehrere Messdateien hintereinander aus (for-Schleife) und will die alle in eine Figur kriegen und mir dann die Legende anzeigen lassen. Da hauts mir dann die Farben in der Legende durcheinander (blau und grün werden abgewechselt und die Farben des Plots nicht berücksichtigt), die ich für die einzelnen Messdateien beim Plotten definiert hab.
Das Einlesen und die Legende ist also abhängig von meiner Eingabe u am Anfang bis zu welcher Datei das Programm arbeiten soll.

Hier wird glaube ich ein ähnliches Problem beschrieben, ich versuch das mal:

http://www.gomatlab.de/legende-abha.....hleife-ausgeben-t686.html

Bei Bedarf kann ich auch mal das ganze Skript posten.
Private Nachricht senden Benutzer-Profile anzeigen
 
seppl123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 06.07.08
Wohnort: Stuttgart
Version: 7.4.0
     Beitrag Verfasst am: 07.07.2008, 15:40     Titel:
  Antworten mit Zitat      
So hat geklappt, indem ich die aktuelle Legenden-Bezeichnung in der for-Schleife in eine vorher definierte Zelle namens Liste übergebe und am Ende mit

Code:


anzeigen lasse.
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 - 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.