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'));
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([13]), {'erster', 'dritter'}); % nur 1. und 3. beschriften
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
ifiscell(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
% --- 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);
% ************** 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');
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.
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!!
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');
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.
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.
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
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
Verschoben: 11.01.2012, 14:15 Uhr von _Peter_ Von Programmierung nach Grafiken und Plots
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.