www.mikrocontroller.net

Forum: PC-Programmierung Screenshot von Subplot mit MATLAB erstellen


Autor: Steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
sub(1) = subplot ('Position', [0.54, 0.83, 0.45, 0.155]);
    plot (vdat(:,1), vdat(:,2), 'k');                               

sub(2) = subplot ('Position', [0.54, 0.66, 0.45, 0.155]); 
    plot (vdat(:,1), vdat(:,3), 'b');

sub(3) = subplot ('Position', [0.54, 0.49, 0.45, 0.155]); 
    plot (vdat(:,1), vdat(:,4), 'c');                                

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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
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

Autor: random (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
tmp = figure; 
set(tmp,'Visible','Off');
pos = get(axes('units','normalized'),'position'); 
delete(gca); 
set(copyobj(handles.axes1,tmp),'units','normalized','position',pos)

[filename, pathname] = uiputfile({'*.jpg'},'Save as');

% als JPG abspeichern 
saveas(tmp,[pathname,filename]);

% temp Figure löschen 
delete(tmp)

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.