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 wird bei Copy to Clipboard nicht übernommen

 

elcachon
Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 09.01.2012, 16:40     Titel: legende wird bei Copy to Clipboard nicht übernommen
  Antworten mit Zitat      
Hallo Matlab Gemeinde,

habe folgende Codezeilen,
Code:

 h1 = figure;                                     % neue Figure zum zwischenspeichern erzeugen
 set(h1, 'toolbar', 'none')                     % Figure Toolbar deaktivieren
 copyobj(handles.limit_file_axis,h1);   % alle Objekte der limit_file_axis ins clipboard kopieren
 print(h1, '-dmeta')
 close(h1)


Problem:
Habe eine GUI mit mehrene Axes, nun möchte ich eine ins clipboard kopieren, um es später z.B in Word einfügen kann!
Dazu öffne ich eine neue Figure, kopiere ich alle Objekte der axes in diese neue Figure;
Funktioniert bestens, jedoch wird die Legende, die ich eingefügt habe nicht mitkopiert!
Was kann ich machen, dass die Legende mitgespeichert wird??
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2012, 16:58     Titel:
  Antworten mit Zitat      
Hallo,

das Parent-Objekt einer Legende ist die Figure, nicht das Koordinatensystem. Dies ermöglicht, dass die Legende z.B. auch außerhalb des eigentlichen Koordinatensystems angezeigt werden kann.

Abhilfe: ich würde das Legenden-Objekt explizit zusätzlich kopieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 09.01.2012, 17:24     Titel:
  Antworten mit Zitat      
Hallo Harald,

könntest du mir da bitte ein Beispiel geben?
Weiß jetz ned wie ich das machen soll. Sitz schon eine zeitlang an dieser Thematik!

lg elcachon
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 09.01.2012, 17:39     Titel:
  Antworten mit Zitat      
Und ich hätte noch eine Frage, ich hoffe des ist in Ordnung
Code:

.......................
    case 3
        plots_handle{1} = semilogx(limitData{1}(:,1).*1e+6,limitData{1}(:,2),'b', 'LineWidth',2, 'DisplayName', listelements{1});
        plots_handle{2} = semilogx(limitData{2}(:,1).*1e+6,limitData{2}(:,2),'k', 'LineWidth',2, 'DisplayName', listelements{2});
        plots_handle{3} = semilogx(limitData{3}(:,1).*1e+6,limitData{3}(:,2),'g', 'LineWidth',2, 'DisplayName', listelements{3});
       
    case 4
        plots_handle{1} = semilogx(limitData{1}(:,1).*1e+6,limitData{1}(:,2),'b', 'LineWidth',2, 'DisplayName', listelements{1});
        plots_handle{2} = semilogx(limitData{2}(:,1).*1e+6,limitData{2}(:,2),'k', 'LineWidth',2, 'DisplayName', listelements{2});
        plots_handle{3} = semilogx(limitData{3}(:,1).*1e+6,limitData{3}(:,2),'g', 'LineWidth',2, 'DisplayName', listelements{3});
        plots_handle{4} = semilogx(limitData{4}(:,1).*1e+6,limitData{4}(:,2),'m', 'LineWidth',2, 'DisplayName', listelements{4});

.........
h = legend(plots_handle{1:length(plots_handle)}, listelements{1:length(plots_handle)};


Durch meine switch Abfrage entscheid ich wieviele plots in die axes kommen.
Nun möchte ich auch die jeweiligen Legenden zu jedem plot einblenden, aber leider haut das so nicht hin!

Grundgedanke:
Möchte später auch einzelne plots wieder löschen und dann muss natürlich die dazugehörige Legende auch gelöscht werden!
Geht das?

lg elcachon!

PS. Sorry für den double post
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2012, 17:48     Titel:
  Antworten mit Zitat      
Hallo,

ich würde es so probieren:

Code:
case 4
        plots_handle(1) = semilogx(limitData{1}(:,1).*1e+6,limitData{1}(:,2),'b', 'LineWidth',2, 'DisplayName', listelements{1});
        plots_handle(2) = semilogx(limitData{2}(:,1).*1e+6,limitData{2}(:,2),'k', 'LineWidth',2, 'DisplayName', listelements{2});
        plots_handle(3) = semilogx(limitData{3}(:,1).*1e+6,limitData{3}(:,2),'g', 'LineWidth',2, 'DisplayName', listelements{3});
        plots_handle(4) = semilogx(limitData{4}(:,1).*1e+6,limitData{4}(:,2),'m', 'LineWidth',2, 'DisplayName', listelements{4});
% das könnte man doch auch mit einer for-Schleife machen?
.........
h = legend(plots_handle(1:length(plots_handle)), listelements(1:length(plots_handle)));
% da die Display Names schon gesetzt sind, müsste auch folgendes gehen:
legend show


Dein ursprüngliches Problem könnte dann auch gelöst werden, indem du dort nochmal
Code:
machst.

Falls das nicht funktioniert: du würdest die Legende haargenau so kopieren wie auch das Koordinatensystem. Das einzige mögliche Problem ist, dass du ein Handle auf die richtige Legende benötigst. In der GUI könnte das kompliziert werden, wenn es mehrere Legenden gibt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 09.01.2012, 18:12     Titel:
  Antworten mit Zitat      
Hallo Harald,

stimmt mit
Code:
wird nun auch die legende mitkopiert, danke soweit!!

jedoch
Code:
h = legend(plots_handle(1:length(plots_handle)), listelements(1:length(plots_handle)));
funktioniert nicht, hatte das auch schon ausprobiert!
Folgende Fehlermeldung erscheint
Zitat:
??? Error using ==> legend>process_inputs at 552
Cell array argument must be a cell array of strings.


Ich muss das fast so machen, da ich später auch wieder einzelne plots und auch die passende Legende dazu löschen möchte!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2012, 18:20     Titel:
  Antworten mit Zitat      
Hallo,

wenn "legend show" an der einen Stelle funktioniert, sollte es immer funktionieren. Es sollte ausreichend sein, "legend show" zu schreiben, wenn ein Graph gelöscht wurde. Falls nicht, unmittelbar davor ein "legend off".

Welchen Datentyp hat listelements?
Falls das Problem bestehen bleibt: kannst du ein reproduzierbares Mini-Beispiel dafür erstellen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 09.01.2012, 18:26     Titel:
  Antworten mit Zitat      
Hallo Harald,

listelements ist ein cell Array mit Strings als Inhalt, sollte also passen!
Code:
K>> listelements

listelements =

    'GM.lim'
    'Renault.lim'


keine Ahnung was da faul ist!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2012, 19:00     Titel:
  Antworten mit Zitat      
Hallo,

folgender Code funktioniert:

Code:
listelements = {'GM.lim','Renault.lim'}';

plots_handle(1) = semilogx(rand(10,1),rand(10,1),'b', 'LineWidth',2, 'DisplayName', listelements{1});
hold on
plots_handle(2) = semilogx(rand(10,1),rand(10,1),'k', 'LineWidth',2, 'DisplayName', listelements{2});
       
h = legend(plots_handle,listelements(1:length(plots_handle)));


Du hattest in deinem Code schon irgendwo ein "hold on", oder? Sonst gehen ja die vorherigen Plots verloren, und dann machen natürlich auch mehrere Legenden keinen Sinn.

Hast du das auch mit "legend show" nochmal probiert?

Grüße,
Harald

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 09.01.2012, 19:47     Titel:
  Antworten mit Zitat      
Hallo Harald,

Ja ein
Code:
hab ich drin!!

Code:
funktioniert bezüglich des löschen der files und der zugehörigen legende! Danke dafür!

Werd das andere morgen früh ausprobieren
Code:
case 4
        plots_handle(1) = semilogx(limitData{1}(:,1).*1e+6,limitData{1}(:,2),'b', 'LineWidth',2, 'DisplayName', listelements{1});
        plots_handle(2) = semilogx(limitData{2}(:,1).*1e+6,limitData{2}(:,2),'k', 'LineWidth',2, 'DisplayName', listelements{2});
        plots_handle(3) = semilogx(limitData{3}(:,1).*1e+6,limitData{3}(:,2),'g', 'LineWidth',2, 'DisplayName', listelements{3});
        plots_handle(4) = semilogx(limitData{4}(:,1).*1e+6,limitData{4}(:,2),'m', 'LineWidth',2, 'DisplayName', listelements{4});


Noch etwas:
Und zwar die obigen plots werden nachträglich in die axes geplottet. Vorher werden zwei andere Graphen geplottet und die obigen kommen dann noch hinzu!

bei
Code:
wird aber nun auch die legenden der beiden anderen plots mit
Zitat:
data1 und data2
beschriftet.
Wie kann man das unterbinden ??? oder diese beiden nicht anzeigen??

lg elcachon
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2012, 20:06     Titel:
  Antworten mit Zitat      
Hallo,

Mir ist keine Möglichkeit bekannt, legend show/hide selektiv einzusetzen.

Dann musst du sehen, dass du die andere Syntax zum Laufen bekommst.

Ich kann nicht nachvollziehen, warum das in meinem Mini-Beispiel (lass das bei dir auch mal laufen) funktionieren sollte und bei dir nicht. Dazu müsstest du eben ein für mich reproduzierbares Beispiel zur Verfügung stellen, in dem das Problem auftritt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 09.01.2012, 21:26     Titel:
  Antworten mit Zitat      
ok Harald, vor ab schon mal rechtherzlichen Dank.
Morgen in der Früh probier ich deinen Vorschlag nochmal aus und wenns dann nicht klappt, versuch ich dir ein Beispiel zu posten!

Guten Abend wünsch ich dir!

Lg elcachon
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 10.01.2012, 14:29     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich hoffe du bist noch da? Shocked
Code:
h = legend(plots_handle,listelements(1:length(plots_handle)));

also diese Zeile funktionierte bei mir deshalb nicht, weil
Zitat:
plots_handle
ein Cell Array war, ich das leider die erste Zeit übersehen hatte, funktiniert jetzt jedoch!

Aber wie kann ich die legende jetzt mitkopieren, irgendwie über das parent handle hast du gemeint, aber wie könnte man das realisieren?
Code:
leider keine Alternative, da ich zwei Graphen im Plot habe, die nicht in der Legende enthalten sein sollen!!

lg elcachon
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.01.2012, 14:52     Titel:
  Antworten mit Zitat      
Hallo,

versuchs mal so:
bei der Erstellung der Legende:
Code:
handles.limit_file_legend = legend(...)
guidata(hObject, handles)


und dann beim Kopieren zusätzlich
Code:
copyobj(handles.limit_file_legend,h1);  


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 10.01.2012, 15:19     Titel:
  Antworten mit Zitat      
Hallo Harald,

funktioniert leider auch ned. Hab mal das uipanel handle mitkopiert, in dem sich axes, und die Buttons befinden, aber auch da gehts nicht.

Jetzt weiß ich nimmer weiter!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  Weiter

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.