Verfasst am: 21.09.2015, 21:02
Titel: figure mit subplot im A4 Layout mit Rahmen
Guten Abend,
mein Problem was ich bewältigen möchte ist folgendes:
in einer figure möchte ich mehrere subplots ausgeben lassen (imshow, bar, plot, text).
Die Größe der figure soll dabei A4 sein. In diesem A4 figure soll ein Rahmen (Abstände von der Außenkante eines A4: links/rechts = ca. 1,5 cm und oben/unten = ca. 3cm). Innerhalb dieses Rahmens sollen dann die subplots angelegt werden.
Nun ist es weniger ein Problem ein figure der Größe A4 zu definieren, sondern einen Rahmen mit den oben genannten Maßen. Das anordnen der subplots ist auch nicht das Problem.
Für Lösungsvorschläge für den gewünschten Rahmen bin ich sehr dankbar.
Verfasst am: 22.09.2015, 11:45
Titel: Re: figure mit subplot im A4 Layout mit Rahmen
Hallo knarf 1.,
Wenn ich es richtig verstehe, ist nur dies für Deine Frage wichtig:
Zitat:
In diesem A4 figure soll ein Rahmen (Abstände von der Außenkante eines A4: links/rechts = ca. 1,5 cm und oben/unten = ca. 3cm).
Was meinst Du mit "Rahmen"? Ein Rechteck? Dann einfach eine AXES-Einfügen, die über das ganze Blatt geht und z.B. per
line
zeichnen. Ein
rectangle
sollte auch möglich sein.
un es sieht dann wenn ich die figure als pdf oder png ausgeben lass wie auf dem Bild im Anhang aus.
An welcher Schraube muss ich drehen um die "Rahmengröße zu ändern?
Die 'Handlevisibility' spielt hier übrigens keine Rolle. Das hat nichts mit der optischen Erscheinung zu tun.
Die Rahmen-Größe ändert man über die Eigenschaft 'Position' im AXES Befehl.
Wenn Du auch hier 'cm' als Units definierst, wird es vielleicht einfacher als mit den 'normalized' Units.
zu erstellen, das das gesamte Blatt ausfüllt, und dann darin zu zeichnen. Aber die Box des AXES zu verwenden geht natürlich auch. Mit dem LINE Befehl könntest Du halt auch noch die Linien-Dicke definieren.
Hi Jan. Vielen Dank für deine Ratschläge.
Mittlerweile habe ich mittels axes einen Rahmen hinbekommen.
Ich habe an meinem Laptop die Parameter der 'Position' so angepasst das der Rahmen so ist wie ich mir gewünscht habe.
Schließe ich den Laptop nun an meinen externen Bildschirm an, ist nichts mehr so wie ich es mir gewünscht habe. In meiner figure ist nur noch ein Ausschnitt und nicht mehr der ganze plot zu sehen.
Gibt es eine Möglichkeit auf allen Geräten die gleich Ausgabe zu erzielen?
Im Anhang zwei Ausgaben in .pdf. Einmal die Laptop Ausgabe wie gewünscht und einmal die Ausgabe an den externen Bildschirm angeschlossen.
Nun musst Du Dich entscheiden: Soll es auf dem Bildschirm richtig aussehen, oder auf dem Ausdruck? Die Paper-Eigenschaften betreffen nur den Ausdruck!
Zitat:
Ich habe an meinem Laptop die Parameter der 'Position' so angepasst das der Rahmen so ist wie ich mir gewünscht habe.
Wenn Du den dazugehörigen Code postest, können die Leser sehen, warum nun die Bildschirmgröße Auswirkungen hat.
Zitat:
Gibt es eine Möglichkeit auf allen Geräten die gleich Ausgabe zu erzielen?
Denk mal nach. Nein, das ist natürlich prinzipiell unmöglich. Du kannst eine Zeichnung nicht so definieren, dass der Kasten immer 0.5 cm Abstand von Rand hat und eine feste Größe. Auf dem Bildschirm hat ein Fenster ja nicht unbedingt die gleichen Seitenverhältnisse wie auf dem Ausdruck.
Definiere also zunächst mal eindeutig, was genau auf welchem Medium wie aussehen soll. Das ist gar nicht so einfach, aber machbar. Ich habe z.B. eine tabellarische Ansicht erzeugt, bei der rechts 3x4 Diagramme zu sehen sind und links ein Erklärungstext. Dieser Text muss auf dem Ausdruck eine feste Breite haben und die Figure auf dem Monitor soll resize-bar sein. Dann müssen aber auf dem Monitor andere Dimensionen einfach flexibel sein, z.B. die Breite des Textes.
Hi Jan.
Es soll definitiv auf dem Ausdruck richtig aussehen. Also so wie das PDF mit dem Namen:Layout_Laptop.
Realisiert hab ich das ganze mit folgendem Quellcode:
Was ich mir vorstelle ist, dass ich in einer figure Größe A4 verschiedene Diagramme, textboxend, Vl. Tabellen darstelle. Diese sind mit einem Rahmen umgeben. Bei der Ausgabe der figure in .pdf oder auch .png soll dies auf einem A4 Blatt die richtigen Dimensionen haben.
Ist es jetzt etwas besser geschildert was ich erreichen möchte?
Es soll definitiv auf dem Ausdruck richtig aussehen. Also so wie das PDF mit dem Namen:Layout_Laptop.
Und erreichst Du das mit demgeziegten Code oder nicht? Bisher sagtest Du, dass es auf dem größeren Monitor nicht korrekt aussieht, aber das ist ja nicht wichtig, oder?
Für die Figure 'normalized' Units zu verwenden bedeutet, dass die Werte der Position zwischen 0 und 1 liegen müssen. [0 0 21.0 29.7] heißt, das die Figure unten links anfängt und 21 mal so breit ist wie der Bildschirm und 29.7 mal so hoch.
Die 'Position' bezieht sich auf die Bildschirm-Ausgabe, die 'PaperPosition' auf den Ausdruck. Nicht durcheinanderbringen lassen!
Der Ausdruck in ein PNG-File ist ein Screen-Shot, bezieht sich also auf die Bildschirm-Koordinaten. Der Ausdruck in ein PDF berücksichtigt aber die PaperPosition. Das ist etwas völlig anderes. Es sei denn, Du stellst die Units der Figure auch auf Zentimeter. Aber das hängt dann wieder von der Anzahl der Pixel pro Zoll Deines Monitors ab.
Wie schon mal gesagt ist das Setzen der 'HandleVisibility' hier wohl nur verwirrend. Wenn manbeginnt Features zu raten, verliert manzu schnell den Überblick. Das stört hier zwar nicht wirklich, aber unnötige Details sollte man unbedingt beim Programmieren weglassen.
Die Koordinaten der
annotation
beziehen sich 'normalized' auf die Figure-Koordinaten. Ob dies auf dem Ausdruck an die richtige Stelle kommt, kann ich nicht abschätzen.
subplot
ist eigentlich das gleiche wie
axes
, bis darauf, dass eine bestimmte Position gesetzt wird. Wenn Du die Position danach sowieso manuell setzt, wäre dies klarer:
Was ich mir vorstelle ist, dass ich in einer figure Größe A4 verschiedene Diagramme, textboxend, Vl. Tabellen darstelle.
Nochmal: Auf dem Bildschirm bedeutet "A4" nicht wirklich etwas sinnvolles, denn Du willst die ja die Figure-Größe verändern (entweder mit Aufziehen des Fensters oder beim Öffnen auf verschiedenen Monitor-Größen). Die Skalierungen der Figure auf dem Bildschirm sind sehr sehr schwer exakt zu bestimmen, insofern A4 nur für den Ausdruck auf Papier sinnvoll.
Zitat:
Diese sind mit einem Rahmen umgeben. Bei der Ausgabe der figure in .pdf oder auch .png soll dies auf einem A4 Blatt die richtigen Dimensionen haben.
Wie schon gesagt: PDF und PNG sind zwei vollkommen unterschiedliche Aufgaben. Beides gleichzeitig exakt definieren zu wollen ist nicht trivial.
Am besten ist, Du versuchst es weiter und beschränkst Dich auf ganz wenige Einzelheiten, um den Unterschied zwischen den Koordinaten-Systemen auf dem Bildschirm und auf dem Papier genau zu verstehen. Die Auswirkungen von 'normalized' und 'cm' Units hängen noch von den absoluten Dimensionen des Eltern-Objektes ab. das ist alles zusammen vollkommen logisch, wegen der vielen Abhängigkeiten aber nicht auf Anhieb klar.
Hi Jan,
vllt findest du nochmal Zeit für mein Problem.
Mit folgenden vier Zeilen bekomme ich eine Ausgabe in .pdf die genau meinen Vorstellungen entspricht (das Programm wird am Laptop der an einen externen Bildschirm angeschlossen ist ablaufen gelassen). --> Ergebnis siehe Anhang
Code:
f = figure(6);
set(f,'PaperOrientation','portrait','Units','centimeters','PaperSize',[21.029.7],'Position',[0021.029.7],'PaperPosition',[0021.029.7]);
ax = axes('ActivePositionProperty','position','units','centimeters','Position',[0.50.519.529.0],'xtick',[],'ytick',[],'box','on');
print(gcf, '-dpdf', 'test.pdf')
Will ich die gleiche Ausgabe in .pdf rein über den Laptop erreichen (Laptop bei ausführen des Programms nicht an einen externen Monitor angeschlossen), ist der Rahmen total verschoben und nicht mehr so wie ich ihn am externen Monitor in der Ausgabe bekommen habe.
Der Rahmen wurde mit Hilfe axes erstellt. Muss man in der axes irgendwie angeben das sich die position der axes auf die paperposition beziehen soll? Denn ich habe das Gefühl das sich die position der axes an die Größe des angeschlossenen Bildschirms anpasst.
Verstehe ich es richtig: Die Ausgabe in ein PDF erzeugt unterschiedliche Ergebnisse, wenn der Rechner an unterschiedliche Monitore angeschlossen ist. Unterscheiden sich auch die Ausgaben auf dem Bildschirm?
Du hast zwar die Units der Figure gesetzt, aber nicht die PaperUnits. Versuche es mit 'centimeters' oder auch mal mit 'normalized' und der PaperSize [0,0,1,1].
Wozu setzt Du die 'ActivePositionProperty'?
Hast Du einen Export in ein EPS versucht, welches du dann per GhostScript umwandelst? Das habe ich hier im forum erklärt (eine Suche hilft). Andere Leute verwenden gerne export_fig aus dem FileExchange (frage auch hier Deine Lieblings-Internet-Suchmaschine).
Zitat:
Denn ich habe das Gefühl das sich die position der axes an die Größe des angeschlossenen Bildschirms anpasst.
Mit Gefühlen lässt sich hier schwer argumentieren. Passt sich die Position an oder nicht? Was geschieht, wenn Du die Größe der Figure von Hand veränderst?
Zitat:
Der Rahmen wurde mit Hilfe axes erstellt. Muss man in der axes irgendwie angeben das sich die position der axes auf die paperposition beziehen soll?
Die Position eines AXES Objektes erfolgt relativ zum Parent-Objekt, also in Deinem Fall die Figure. Die Größe der Figure wird beim Ausdrucken anhand der Paper... Eigenschaften angepasst. Wenn alles richtig eingestellt ist, ist das erzeugte PDF vollkommen unabhängig von der Darstellung auf dem Monitor. Wo es bei Dir genau hängt, ist mir noch nicht klar. Also versuche es weiter.
Gruß, Jan
Einstellungen und Berechtigungen
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.