Verfasst am: 20.03.2015, 08:59
Titel: "Dynamische" Legende mit Gruppierung mehrer Punkte
Hallo Leute,
ich brauch mal wieder Hilfe.
Habe einen Code der eine Simulation/Berechnung eines Externen Programms startet diese Daten werden in Matlab eingeholt und verarbeitet.
Während der Berechnung habe ich zwei Subplots die mir im Prinzip den "aktuellen" Status und einige Daten anzeigt. Alles dynamisch.
Mein Problem ist jetzt das ich eine Legende brauche für einen bestimmten Plot. Dieser Plot zeigt mir die Effizienz mittels "o" an jede "Grenze" hat eine Farbe. Hier bräuchte ich eine Gruppierung sprich wenn ich 10 mal die Effizient mit dem Wert 70 habe will ich nicht das ich 10 mal das selbe in der Legende sehe.
Hab schon einige Versuche gestartet aber kam zu keinem anständigen Ergebnis.
Mein Plot Code sieht so aus (nichts besonderes):
Code:
if GrphOut == 1 figure(h) axes(hi) hold on
for i = 1:size(Nprv,1) if Eprv(i) >= 0.950 plot(Nprv(i), Tprv(i), 'ro');
elseif Eprv(i) >= 0.900 plot(Nprv(i), Tprv(i), 'bo');
elseif Eprv(i) >= 0.850 plot(Nprv(i), Tprv(i), 'go');
elseif Eprv(i) >= 0.800 plot(Nprv(i), Tprv(i), 'mo');
elseif Eprv(i) >= 0.750 plot(Nprv(i), Tprv(i), 'co');
else plot(Nprv(i), Tprv(i), 'yo');
end end xlabel('Speed in p.u.') ylabel('Torque in p.u.') title('Efficiency') drawnow axes(hj) hold on
for i = 1:size(Nprv,1) if Iprv(i) >= 0.950 plot(Nprv(i), Tprv(i), 'ro') elseif Iprv(i) >= 0.900 plot(Nprv(i), Tprv(i), 'bo') elseif Iprv(i) >= 0.850 plot(Nprv(i), Tprv(i), 'go') elseif Iprv(i) >= 0.800 plot(Nprv(i), Tprv(i), 'mo') elseif Iprv(i) >= 0.750 plot(Nprv(i), Tprv(i), 'co') else plot(Nprv(i), Tprv(i), 'yo') end end xlabel('Speed in p.u.') ylabel('Torque in p.u.') title('Current') drawnow % axes(hk) % hold on % for i = 1:size(Nprv,1) % if Vprv(i) >= 0.950 % plot(Nprv(i), Tprv(i), 'ro') % elseif Vprv(i) >= 0.900 % plot(Nprv(i), Tprv(i), 'bo') % elseif Vprv(i) >= 0.850 % plot(Nprv(i), Tprv(i), 'go') % elseif Vprv(i) >= 0.800 % plot(Nprv(i), Tprv(i), 'mo') % elseif Vprv(i) >= 0.750 % plot(Nprv(i), Tprv(i), 'co') % else % plot(Nprv(i), Tprv(i), 'yo') % end % end % xlabel('Speed in p.u.') % ylabel('Torque in p.u.') % title('Voltage') % drawnow end end
Hab auch schon einen Versuch mit "DisplayName" gestartet leider sieht das Ergebnis wie im Anhang aus.
Eine andere Möglichkeit oder erstmal ausreichende Lösung wäre wenn ich eine statische Legende bzw. eine "TextBox" hätte die immer vorhanden wäre d.h. nicht Graphen bzw. Datensatz abhängig.
Die Berechnung läuft die ersten Kreise erscheinen im Plot aber keine Legende... Die Berechnung läuft weiter und irgendwann bekomme ich folgende Fehlermeldung:
___________________________
Index exceeds matrix dimensions.
Error in bac_ectr_main (line 407)
legend(p([6 size(Nprv,1)]))
___________________________
Versteh ich das richtig in deinem Beispiel ist die "2" die Anzahl der Einträge in der Legende für "4" Graphen oder ?
So wie es im Code läuft ist es glaube ich schwierig kurz zu halten.
Der Ablauf ist folgend:
-Ersten Arbeitspunkt angeben
-Werte an Externes Programm
-Werte von Externes Programm holen
-Werte werden je nach Wert in eine bestimmte Farbe geplottet
-Dann kommt der nächste Arbeitspunkt
-Hier folgen dann die selben Arbeitsschritte wie oben
usw.
und wie soll die Beschriftung tatsächlich aussehen?
Schau dir doch auch mal scatter (mit 4 Argumenten) oder gscatter (aus Statistics Toolbox) an. Dort sind solche Möglichkeiten ja schon vorgefertigt. Das sollte dann auch deutlich schneller gehen.
Danke für deinen Vorschlag, funktioniert auch problemlos im Minimalbeispiel,
aber leider nicht in meinem Code selber.
Bekomme folgenden Fehler:
_________________________________________________________
Error using legend (line 204)
Handle must be an axes or child of an axes.
Nur der Daten-Input sieht halt anders aus aber das dürfte ja an sich eigentlich keine Probleme machen. Dieser Code wird halt nur mehrmals durchlaufen. Ich habe z.B. 100 Arbeitspunkte die ich durchlaufe und nach jedem Arbeitspunkt wird dieser code durchlaufen und die einzelnen Punkte geplottet. Sobald die Berechnung aller Punkte abgeschlossen ist schließt sich das Fenster bzw. Figure. Es dient lediglich zur Veranschaulichung der Berechnung/Simulation.
ich kann mir leider auch nicht erklären, warum sich das nicht auf deine Daten übertragen lässt. Letztlich muss es ja einen Unterschied zwischen dem Minimalbeispiel und dem tatsächlichen geben. Ich kann mit den vorhandenen Informationen keinen solchen Unterschied erkennen.
Ideal für weitere Unterstützung wäre es, wenn du ein Beispiel liefern kannst, in dem das gleiche Problem auftritt.
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
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.