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

Legende-Kasten: Größe und Linienlänge

 

Fabian1234
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 09.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2010, 12:18     Titel: Legende-Kasten: Größe und Linienlänge
  Antworten mit Zitat      
Hallo zusammen,
weiß jemand vielleicht, wie man die Kastengröße der Legende verändern kann? Außerdem sind mir die geplotteten Striche zu lange, wie kann man diese kürzen? Rolling Eyes

Wäre euch sehr dankbar für eure hilfe

Gruß Very Happy
Private Nachricht senden Benutzer-Profile anzeigen


Fabian1234
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 09.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2010, 08:26     Titel:
  Antworten mit Zitat      
Niemand ???? Crying or Very sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 24.09.2010, 20:05     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Niemand ????


DOCH Smile.

Aenderung der Boxgroesse (in meinem Fall eine Vergroesserung) funktioniert ueber:

Code:

plot(sin(1:0.1:10));
h = legend('Sinus');
set(h,'Position',[0.7 0.8 0.2 0.1]) % [left, bottom, width, height] --> siehe help z.B. bei "figure properties"
 


Die Aenderung der Linienlaenge:

Code:

ch = get(h,'child'); % Ergibt 3 Handles (Marker, Linie und Text der Legende)
set(ch(2),'XData',[0.4 0.5]); % kurze Linie
 


Denke das sollte es sein Smile

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Cococabana
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 15.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2012, 10:23     Titel:
  Antworten mit Zitat      
Hallo,

unnötig einen neuen thread aufzumachen... Very Happy

Die von Sco genannte Methode funktioniert, jedoch nur für den letzten Eintrag einer Legende. Was stelle ich an um die Linienlänge aller Legendeneinträge einheitlich zu verändern?

Hier ein Versuch wie es nicht klappt... Sad

Code:

t=1:0.1:10;

plot(t,sin(t),...
      t,cos(t),...
      t,sin(1.1*t));
h = legend('Sinus','Cosinus','1.1 * Sinus');

ch = get(h,'child'); % Ergibt 3 Handles (Marker, Linie und Text der Legende)
set(ch(2),'XData',[0.25 0.4]); % kurze Linie
 


Grüße, Cococabana
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 23.07.2012, 11:38     Titel:
  Antworten mit Zitat      
Hallo,

bei 3 Legenden bekommst du nicht 3 sondern 9 handles und dann musst du eben die 3 Linien einzeln ansprechen:

Code:

set([ch(2) ch(5) ch(8)],'XData',[0.25 0.4]); % kurze Linie
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Cococabana
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 15.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2012, 12:47     Titel:
  Antworten mit Zitat      
Puh, okay, das zumindest klappt ja schonmal sehr gut! Danke!

Leider zieht es wieder andere Problemchen nach sich. Rolling Eyes Auch wenn sich die Legendenlinien ändern, bleibt die Größe der umschließenden Box natürlich gleich. Wie man sie neu festlegt, hast du ja schon beschrieben. Leider ist auch bei kleinster möglicher Einstellung der Rahmen noch sehr groß (siehe Codebeispiel) und auch die Position der Legende in der Figure taste ich ja damit an. Die soll aber ruhig da bleiben wo sie von Matlab hingesetzt wird...

Gibt es nicht eine Möglichkeit die Legende so klein wie möglich, in Abhängigkeit der Linienlänge und der Länge des (variierenden) Variablennamens zu halten?

Code:
t=1:0.1:10;

f = figure(1);

plot(t,sin(t),...
     t,cos(t),...
     t,sin(1.1*t));
h = legend('Sinus','Cosinus','1.1 * Sinus');

figure_width = 16;
figure_height = 8;
set(f, 'units', 'centimeters', 'position', [15 15 figure_width figure_height])
set(gcf,'PaperPositionMode','auto');

ch = get(h,'child'); % Ergibt 3 Handles (Marker, Linie und Text der Legende)
set([ch(2) ch(5) ch(8)],'XData',[0.25 0.4]); % kurze Linie
set(h,'units', 'centimeters','Position',[figure_width-4.65 figure_height-2.85 3 1.5])


Gruß und danke im voraus =)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2013, 12:17     Titel: Einfacherer Weg die Linienobjekte zu finden
  Antworten mit Zitat      
Um die Linienobjekte in der Legende zu finden ist es einfacher folgenden Code zu nutzen (damit muss dann auch nicht mehr festgelegt werden welche Einträge aus ch geändert werden sollen).
Das Problem mit der Legendgröße an sich bleibt natürlich noch...

[code]
XDataSize = [0.25 0.4];
ch = findobj(HLegends(i),'type','line','-and','-not','LineStyle','none','-and','marker','none');
set(ch,'XData',XDataSize);
[code]
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2013, 12:20     Titel: Korrektur
  Antworten mit Zitat      
Code:

 XDataSize = [0.25 0.4];
 ch = findobj(h,'type','line','-and','-not','LineStyle','none','-and','marker','none');
 set(ch,'XData',XDataSize);
 
 
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.