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
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:30     Titel:
  Antworten mit Zitat      
habs versucht die UserData zu übergeben, klappt zwar, aber die Legende wird trotzdem nicht mitangezeigt!!
Code:
copyobj(handles.limit_file_axis  ,h1); % alle Objekte der limit_file_axis ins clipboard kopieren
set(h1,'UserData', get(handles.limit_file_legend, 'UserData'));
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, 15:41     Titel:
  Antworten mit Zitat      
Hallo,

was passiert, wenn du es wie von mir beschrieben versuchst?
Ein einfacheres Beispiel:

Code:
%% erste Figure
f1 = figure();
a1 = subplot(3,1,1);
p = plot(rand(10,4)); % 4 Linien plotten
l = legend(p([1 3]), {'erster', 'dritter'}); % nur 1. und 3. beschriften

%% kopieren in neue Figure
f2 = figure();
copyobj(a1, f2);
copyobj(l, f2)


Wenn das noch nicht klappt, wäre ein lauffähiges Beispiel hilfreich, an dem die Probleme auftreten - zur Not die gesamte GUI.

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, 18:38     Titel:
  Antworten mit Zitat      
leider funktioniert es immer noch ned, poste jetz mal die relevanten Programmausschnitte!!

Code:
% --- Executes on button press in add_limit_file_pushbutton.
function add_limit_file_pushbutton_Callback(hObject, eventdata, handles)
% Über uigetfile wird Auswahlfenster geöffnet;
% Name in inputfile, Pfad in pathname gespeichert
[inputfile,pathname] = uigetfile(...
    {'*.lim','LIMIT-files(*.lim)'},'Select files','MultiSelect','on');
% Ist keine Datei ausgewählt, springt Matlab durch return aus der Funktion
% heraus
if pathname == 0
     return
end
listelements = get(handles.limit_file_listbox,'String');

% Überprüfen ob mehrere Limit-Files gleichzeitig ausgewählt wurden
%nur ein Element ist ausgewählt--> kein Cell-Array
if iscell(inputfile)==0  
         listelements{length(listelements)+1} = inputfile;
         inputfile = listelements;
         size_inputfile = 1;
% zwei oder mehrere Elemente ausgewählt
else
    for a = 1:length(inputfile)
        listelements{length(listelements)+1} = inputfile{a};
        size_inputfile = length(inputfile);
    end
end

% **********Aktuell in der Listbox befindliche Limits ************
lim_in_listbox = get(handles.limit_file_listbox,'String');
if (length(lim_in_listbox) == 4 ||(length(lim_in_listbox) + size_inputfile > 4 ))
    errordlg('Only 4 Limit Files can be shown in plot')
    return
end

set(handles.limit_file_listbox,'String',listelements);
% erster wert in listbox ist immer ausgewählt, sonst CRASH
set(handles.limit_file_listbox,'Value',1);

% Initialisierung der Variable data als Cell-Array
handles.data_limit = {};
% Auslesen der in der Listbox befindlichen Files
for y = 1:length(inputfile)
    handles.data_limit{y} = importMyData(inputfile{y});
%    handles.min_data{ii}
end

% Aufrufen der Funktion plotData
[handles.plots_handle, handles.limit_file_legend] = plotData(handles.limit_file_axis, handles.data_limit, inputfile);

% update handles structure
 guidata(hObject,handles);


% --- Executes on button press in delete_limit_pushbutton.
function delete_limit_pushbutton_Callback(hObject, eventdata, handles)
% hObject    handle to delete_limit_pushbutton (see GCBO)
% Elemente der Listbox auslesen
limitFiles = get(handles.limit_file_listbox, 'String');
% Reihenfolge der Listboxelemente auslesen
order = get(handles.limit_file_listbox     , 'Value');
% ist kein Element in der Liste-->nichts löschen
if(isempty(limitFiles)||order(1) ==0)
    return
end
% löschen der ausgewählten Elemente (Inhalt)
limitFiles(order) = [];
% löschen aus listbox und updaten der listbox elemente
set(handles.limit_file_listbox, 'String', limitFiles);
% erstes Element muss wieder den Wert 1 erhalten, sonst ERROR
if(order(end) > length(limitFiles))
    set(handles.limit_file_listbox, 'Value', length(limitFiles));
end
axes(handles.limit_file_axis);
% legend off
% Limit File aus Plot löschen--> Zugriff erfolgt über das Handle
delete(handles.plots_handle(order))

handles.plots_handle(order) = [];

if (isempty(handles.plots_handle))
    legend off
    return
end
% h = legend(handles.plots_handle, limitFiles(1:length(handles.plots_handle)));
% set(h, 'Interpreter','none');
% legend show
% update handles structure
 guidata(hObject,handles);


% --- Executes on button press in EXPORT_PLOT_pushbutton.
function EXPORT_PLOT_pushbutton_Callback(hObject, eventdata, handles)
% Hier soll die axes zum clipboard exportiert werden
h1 = figure();                           % neue Figure zum zwischenspeichern erzeugen
set(h1, 'toolbar', 'none')             % Figure Toolbar deaktivieren
copyobj(handles.plots_handle      ,h1); % alle Objekte der limit_file_axis ins clipboard kopieren
% Handle der Legende in der Axes, leider wird legende nicht übernommen
copyobj(handles.limit_file_legend,h1);  

print(h1, '-dmeta')
close(h1)

% ************** Unterprogramm, zum plotten der Limit Files *******
%% Funktion Plot Data for LIMIT-FILES-ONLY%%

% Maximal können 5 Limit Files gleichzeitig geplottet werden

function [plots_handle, h] = plotData(axesName, limitData, listelements)
% legend(axesName,'off');
axes(axesName);
% Handle der einzelnen Limit Files
plots_handle = [];
hold on
grid on
for xx = 1:length(limitData)
    plots_handle(xx) = semilogx(limitData{xx}(:,1).*1e+6,limitData{xx}(:,2), 'LineWidth',2, 'DisplayName', listelements{xx});
end
% legend show
h = legend(plots_handle,listelements(1:length(plots_handle)));
set(h, 'Interpreter','none');

hold off
 


Ich hoffe des hilft dir etwas!
Danke das du mir hilfst!
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, 18:46     Titel:
  Antworten mit Zitat      
Hallo,

inwiefern klappt es nicht? Wird die Legende gar nicht übernommen oder falsch?
Klappt mein Beispiel bei dir?

Eine Alternative wäre, die Legende mit dem legend-Befehl so wie ursprünglich zu erzeugen. Dazu musst du natürlich dafür sorgen, dass die benötigten Infos auch verfügbar sind.

Hilfreich wäre ein lauffähiges Beispiel, 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: 10.01.2012, 18:52     Titel:
  Antworten mit Zitat      
dein Programm läuft bei mir tadellos.
Die Legende wird überhaupt nicht übernommen, alles andere schon, die Plots, die Skalierung, alles, nur die Legende nicht!

Des lustige ist, wenn ich außerhalb meiner Oberfläche teste, wie mit deinem Teilprogramm hauts ja hin, nur in der Oberfläche selbst nicht!!

Kann das vielleicht mit dem
Code:
Befehl zusammenhängen??
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, 19:41     Titel:
  Antworten mit Zitat      
Hallo Harald,

jetz hab ichs!

es lag an folgender Zeile!
Code:
set(figh, 'toolbar', 'none')

Dadurch wurde anscheinend die Legende auch mit deaktiviert!! GOTT SEI DANK endlich!
leider ist die Legende ein bißchen verschoben, obwohl ich die Position festgelegt habe!
Code:
h = legend(plots_handle,listelements(1:length(plots_handle)),'Location', 'NorthEast');
set(h, 'Interpreter','none');

habs mal angehängt. Vielleicht weil die beiden axes nicht gleich groß sind kann das sein, oder weil die units nicht auf normalized gestellt ist!

Hast du vielleicht ne Ahnung warum sich das verschiebt??

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, 20:07     Titel:
  Antworten mit Zitat      
Hallo,

hast du versucht, in der neuen Figure die location nochmal explizit zu setzen?

Code:
l = copyobj(handles.limit_file_legend,h1);
set(l, 'location', 'northeast')


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, 20:17     Titel:
  Antworten mit Zitat      
ja hab ich auch schon gemacht,
keine Veränderung, ist immer noch verschoben!

Man des gibts doch ned. Ein Problem gelöst und ein neues tritt hervor!
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, 20:28     Titel:
  Antworten mit Zitat      
Hallo,

alternativ kannst du über die 'Position' gehen. 'Position' der alten Legende auslesen, und in der neuen Legende explizit setzen.

In meinem Beispiel:
Code:
f1 = figure();
a1 = subplot(3,1,1);
p = plot(rand(10,4)); % 4 Linien plotten
l = legend(p([1 3]), {'erster', 'dritter'}); % nur 1. und 3. beschriften
pos = get(l, 'position');

%% kopieren in neue Figure
f2 = figure();
copyobj(a1, f2);
l2 = copyobj(l, f2);
set(l2, 'position', pos)


Sorry, dass das so etappenweise geht, aber ich kann es eben nicht selbst an deinem Beispiel ausprobieren und daher nur einen Versuch nach dem nächsten machen.

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, 21:02     Titel:
  Antworten mit Zitat      
Hallo,

mir tuts leid, aber anders gehts momentan leider nicht!

Deine neuer Lösungsansatz funktioniert leider auch nicht. Tut mir leid das ich dich so beanspruche, aber allein würd ich ned weiterkommen.

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, 21:21     Titel:
  Antworten mit Zitat      
Hallo,

immer noch das Platzierungsproblem? Nun gehen mir auch die Ideen aus, da ich das nunmal auch nicht reproduzieren kann.

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, 21:54     Titel:
  Antworten mit Zitat      
ja leider immer noch!
Ich brech jetzt für heute ab!

Ich geh das morgen nochmal schritt für schritt und ganz in ruhe durch. Vielleicht schreib ich ein kurzes testprogramm und dann werd ich es dir hier posten.

Danke für deine Hilfe!

Guten Abend

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: 11.01.2012, 11:24     Titel:
  Antworten mit Zitat      
Hallo Harald,

bin leider immer noch nicht weiter, aber ich hab was gefunden,m wo jemand genau das gleiche Problem hatte, nur bin ich denk ich zu blöd die Lösung zu verstehen.
Vielleicht könntes du ja mal draufschaun, wär dir echt sehr dankbar

http://www.physicsforums.com/showthread.php?t=297526
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: 11.01.2012, 11:38     Titel:
  Antworten mit Zitat      
Hallo,

diesen Vorschlag hatten wir schon probiert - das ergab das Problem mit der Platzierung der Legende.

Du könntest die Position auch nach Wunsch hart reinkodieren, als 1x4-Vektor.

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: 11.01.2012, 11:49     Titel:
  Antworten mit Zitat      
Hallo Harald,

ja das hab ich gerade ausprobiert, das funktioniert. Meine Filenamen sind halt von unterschielicher Länge und da ist es schwierig den 'postion' Vektor vorzugeben!

Weißt du zufällig ob es möglich ist, NUR die legende ohne den Plot zum Clipboard zu kopieren?

Denn da ja beides nicht so richtig funktioniert, möchte ich den Plot seperat und die Legende seperat kopieren.

lg elcachon
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 11.01.2012, 14:15 Uhr von _Peter_
Von Programmierung nach Grafiken und Plots
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  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.