Forum: PC-Programmierung Screenshot von Subplot mit MATLAB erstellen


von Steve (Gast)


Lesenswert?

Hallo,

ich hätte eine Frage bezüglich GUI-Programmierung mit MATLAB. Also auf 
meinem GUI befinden sich einige Elemente, wie eine 2 listboxen, buttons, 
Bilder und 3 subplots. Diese 3 subplots und auch nur diese möchte ich 
gerne in einem Bild (sei es jpg oder png) speichern. Ich möchte diese 
Bilder später gerne in einem html-File einbinden.

Hat jemand eine Ahnung wie das funktioniert? Ich hab schon ein Skript 
gefunden, das mir das komplette GUI in einem Bild speichert, aber ich 
möchte ja nur einen Teil des GUI´s.

Vermutlich benötige ich dazu das handle des subplots. Wie kann ich das 
herausfinden?

Bin leider noch Anfänger was GUI und MATLAB betrifft und hoffe, ihr 
könnt mir helfen.

Vielen Dank,

Steve

von Frank (Gast)


Lesenswert?

So wie es aussieht, kann der print-Befehl nur mit handles auf figures 
umgehen. Die handles auf die axes sind in 'children' gespeichert. 
(get(hfigure, 'children'))Man könnte also Kopien der axes in eigene 
figures zeichnen und die dann mit print exportieren. Dazu gibts auch 
noch das skript exportfig auf der Mathworks-Seite. Das erlaubt eine 
ziemlich genaue formatierung der Grafik.

von Frank (Gast)


Lesenswert?

Oder du machst einfach die nicht gewünschten Elemente unsichtbar:
set(hslider, 'visible', 'off')
export -dmeta bild.wmf
set(hslider, 'visible', 'on')

Irgendwas in der Art könnte gehen.

von Steve (Gast)


Lesenswert?

Danke für die Tipps!

Die letzte Variante kommt glaub ich weniger in Betracht, hab das schon 
ausprobiert und ich bekomme dann auch Probleme mit dem GUI.

Wie aber kann ich meine subplots in Bilder/figures speichern? Ich 
erstelle die plots ganz normal im GUI.

Beispiel:
1
sub(1) = subplot ('Position', [0.54, 0.83, 0.45, 0.155]);
2
    plot (vdat(:,1), vdat(:,2), 'k');                               
3
4
sub(2) = subplot ('Position', [0.54, 0.66, 0.45, 0.155]); 
5
    plot (vdat(:,1), vdat(:,3), 'b');
6
7
sub(3) = subplot ('Position', [0.54, 0.49, 0.45, 0.155]); 
8
    plot (vdat(:,1), vdat(:,4), 'c');

Wie lässt sich aus diesen plots ein Bild erzeugen?

von Frank (Gast)


Lesenswert?

doc print ;)
mit -d<formmat> festlegen und dateiname dazu
z.b.
plot(1:3,4:6);
print -dbmp test.bmp %speichert aktuelle figure

einzelne subplots kann man afaik nicht speichern, es gehen nur ganze 
figures
also zur not kurz die daten in eine eigene figure plotten

von Steve (Gast)


Lesenswert?

Hm irgendwie bekomme ich das nicht gebacken.:-(

Also wenn ich eines meiner subplots in figures speichern will, gibt es 
noch ein Problemchen. Möchte ich z.B. das erste subplot speichern mit 
dem Befehl:
1
saveas(sub(1), 'output', 'fig')

Dann wird nicht nur das erste subplot, sondern mein ganzes GUI in der 
Figure gespeichert? Wie gibts das? Kann es sein, dass das etwas mit den 
"parents" und "children" zu tun hat?

Wär echt super wenn das jemand wüsste.

Thanks

Steve

von random (Gast)


Lesenswert?

Im Netz findet man mehrere Möglichkeiten. Hängt auch ein wenig davon ab 
wie dein Plot nun genau aussieht.

Eine Möglichkeit wäre die hier. In Grunde wird ein neues unsichtbares 
Fenster geöffnet, indem dein Plot hineinkopiert wird und dies wird dann 
gespeichert. Sollte auf den Weg auch mit Subplots funktionieren:
1
tmp = figure; 
2
set(tmp,'Visible','Off');
3
pos = get(axes('units','normalized'),'position'); 
4
delete(gca); 
5
set(copyobj(handles.axes1,tmp),'units','normalized','position',pos)
6
7
[filename, pathname] = uiputfile({'*.jpg'},'Save as');
8
9
% als JPG abspeichern 
10
saveas(tmp,[pathname,filename]);
11
12
% temp Figure löschen 
13
delete(tmp)

Hast du ein Plot mit 2 y-Achsen, funktioniert das ganze leider nicht. 
Darans scheiter ich gerade ... ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.