kann mir jemend sagen warum bei diese code nur den Graph
geschpeichert ohne Legend???
ich danke für jede Antwort
Code:
% --- Executes on button press in pushbutton10. function pushbutton10_Callback(hObject, eventdata, handles) % hObject handle to pushbutton10 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
a=handles.axes1;
a = gca;
printfig = figure('Visible','off');
info = get(a, {'Parent','Units','Position'});
set(a, 'Parent',printfig,'Units','Normalized','Position',[.1 .1 .8 .8]);
print(printfig,'-dpng','Grafik1');
hold on
set(a,'Parent',info{1},'Units',info{2},'Position',info{3});
close(printfig)
Wenn Du eine Legende im Plot haben möchtest, musst Du sie auch in die FIGURE kopieren. Du bewegst aber nur ein AXES-Objekt in die FIGURE. Setze doch bitte 'Visible' der FIGURE auf 'on', dann wprdest Du es auch direkt sehen können.
Nein, natürlich klappt das nicht. Du kannst aber zumindest sehen, warum es nicht klappt, oder? Du fügst in der FIGURE gar keine Legend ein, also wird natürlich auch keine ausgedruckt.
Gehe doch mal Zeile für Zeile durch Deinen Code:
a = handles.axes1
Du erhälst den Handle der AXES aus dem Struct "handles".
a = gca
Du überschreibst den Handle in "a" sofort wieder mit dem Handle der aktuellen AXES (dann ist der vorherige Schritt überflüssig...)
printfig = figure('Visible','on');
Du erstellst eine neue FIGURE.
info = get(a, {'Parent','Units','Position'});
set(a, 'Parent',printfig,'Units','Normalized','Position',[.1 .1 .8 .8]);
Du bewegst das aktuelle AXES-Objekt in die neue FIGURE.
print(printfig,'-dpng','Grafik1');
Du speicherst die FIGURE als PNG.
Alles weitere ist für die Grafik irrelevant.
Also wird an keiner Stelle eine Legende produziert. Woher soll sie dann im Bild kommen?
Lösung: Füge einfach per LEGEND eine Legende ein.
hallo,
sorry ,
legend kommt von eine andere pushbuton,dasheist beim drücken wird den graph gezeichgt mit legend und hier ist noch mal den Code.
leider scheitert jede versuch ,ich bitte um jeder Hilfe?
Code:
% --- Executes on button press in pushbutton6. function pushbutton6_Callback(hObject, eventdata, handles) % hObject handle to pushbutton7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
set(hObject,'Enable','off') pause(0.001)
val = get(handles.listbox1,'Value');
for n=1:length(val)
data(:,n) = cell2mat(handles.Data.(sprintf('Text%.0f',val(n)))(:,3));
dates(:,n) = cell2mat(handles.Data.(sprintf('Text%.0f',val(n)))(:,1));
end
co = get(handles.axes2,'Color');
plot(dates,data,'Color','m') set(handles.axes2,'Color',co)
set(hObject,'Enable','on') hold on
legend('Long Lokal',1) ;
hold on
h = zoom ;
set(h,'Motion','horizontal','Enable','on');
set(gcf,'Color',('w'));
catch %#ok
set(hObject,'Enable','on')
%hold on
end
% --- Executes on button press in pushbutton11. function pushbutton11_Callback(hObject, eventdata, handles) % hObject handle to pushbutton11 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
a=handles.axes1;
a = gca;
printfig = figure('Visible','off');
info = get(a, {'Parent','Units','Position'});
set(a, 'Parent',printfig,'Units','Normalized','Position',[.1 .1 .8 .8]);
print(printfig,'-dpng','Grafik2');
hold on
set(a,'Parent',info{1},'Units',info{2},'Position',info{3});
close(printfig) ;
Du hast jetzt 4 mal den gleichen Code gepostet. Das ist keine effiziente Methode ein Problem zu beschreiben oder zu lösen.
Nachwievor sehe ich keinen Versuch von Dir die Legende in die Grafik einzufügen. Du hast aber an anderer Stelle per "legend('Long Lokal',1)" eine Legende erzeugen können. Wieso machst Du das nicht einfach auch direkt vor dem Abspeichern der Grafik?
Danke für die Antwort,aber ich bin matlab anfänger
leider ich habe das immer noch nicht hingekriegt,
Aber du hasst Jan seine Ratschläge auch nicht mal versucht umzusetzen, jedenfalls kann ich das aus deinem Code nicht erkennen. Hier ist ein Beispiel wie es für einen Plot funktioniert:
Code:
printfig = figure('Visible','off');
a = axes('Parent',printfig);
plot(1:10,rand(3,10),'Parent',a);
set(a, 'Parent',printfig,'Units','Normalized','Position',[.1 .1 .8 .8]);
legend(a,'data1','data2','data3');
title(a,'DAS IST MEIN PLOT','Color','red');
set(get(gca,'XLabel'),'String','X-DATA');
set(get(gca,'YLabel'),'String','Y-DATA');
print(printfig,'-dpng','Grafik2');
Falls du irgendwelche Daten z.B. die Legendenbeschriftungen nicht in dem Callback deines "Export"-Pushbuttons zur Verfügung hasst, d.h. dass diese nur in einem anderen Callback vorhanden sind, dann musst du sie mit in der handles-Struktur des Guis speichern und dann im "Export"-Callback wieder aufrufen:
Code:
% in deinem Callback "pushbutton6_Callback"
handles.legende = {'data1','data2','data3'}; % Legendenbeschriftungen guidata(hObject,handles)% Abspeichern der neuen handles struktur
% in deinem Callback "pushbutton11_Callback" ... plot(...);
% Extraktion der Legendenbeschiftung aus der handles-Struktur legend(a,handles.legende{1},handles.legende{2},handles.legende{3});
....
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.