WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

figure mit subplot im A4 Layout mit Rahmen

 

knarf 1.
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 28.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2015, 21:02     Titel: figure mit subplot im A4 Layout mit Rahmen
  Antworten mit Zitat      
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.

Grüße

knarf 1.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.09.2015, 11:45     Titel: Re: figure mit subplot im A4 Layout mit Rahmen
  Antworten mit Zitat      
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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
knarf 1.
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 28.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2015, 14:58     Titel:
  Antworten mit Zitat      
Hey Jan

genau mit Rahmen meine ich ein Rechteck.
Mit axes hab ich es schon folgendermaßen probiert:
Code:
figure1 = figure(...
        'PaperType','a4',...
        'PaperOrientation','landscape',...
        'PaperUnits','centimeters',...                                
        'PaperPosition',[1 1 29 21],...                                  
        'PaperSize',[29.7 21.0]);
 

     
axes('Position',[.005 .005 .99 .99],'ytick',[],'box','on','handlevisibility','off')


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?

Danke

untitled.pdf
 Beschreibung:

Download
 Dateiname:  untitled.pdf
 Dateigröße:  20.49 KB
 Heruntergeladen:  447 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.09.2015, 14:38     Titel:
  Antworten mit Zitat      
Hallo knarf 1.,

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.

Ich dachte übrigens daran ein
Code:
axes('Position', [0,0,1,1])

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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
knarf 1.
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 28.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2015, 20:53     Titel:
  Antworten mit Zitat      
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.

Viele Dank.

Layout2_externer Bildschirm.pdf
 Beschreibung:

Download
 Dateiname:  Layout2_externer Bildschirm.pdf
 Dateigröße:  104.16 KB
 Heruntergeladen:  391 mal
Layout_Laptop.pdf
 Beschreibung:

Download
 Dateiname:  Layout_Laptop.pdf
 Dateigröße:  75.16 KB
 Heruntergeladen:  415 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.09.2015, 12:05     Titel:
  Antworten mit Zitat      
Hallo knarf 1.,

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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
knarf 1.
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 28.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 12:43     Titel:
  Antworten mit Zitat      
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:
Code:
set(f,'PaperType','a4','PaperOrientation','portrait','Units','normalized','PaperSize',[21.0 29.7],'Position',[0 0 21.0 29.7]);
axes('Position',[0.28 0.005 0.44 0.995],'xtick',[],'ytick',[],'box','on','handlevisibility','off')


h1 = annotation('textbox',[0.280 0.799 0.439 0.2],'LineWidth',1,'String','Hallo');

h2 = subplot(4,1,2);
plot(Sensor_D_4,Z)
set(h2,'position', [0.3 0.5 0.4 0.2]);

h3 = subplot(4,1,3);
bar(t,Z_pm)
set(h3,'position', [0.3 0.2 0.4 0.2]);

% Erste X-Achse

ax(1) = gca;
ax(1).FontSize = 12;
ax(1).TickDir = 'out';
ax(1).TickLength = [0.01 0.09];
ylim('auto')
xlim([0 n+1]) % Anzeigebereich von Werte
ax(1).XTick = [1:1:30];
set(gca,'box','off')
ax(1).XTickLabel = [];
ax(1).XGrid = 'off';
ax(1).YGrid = 'on';

% Beschriftung x-Achse Wellenzahl
for i = t
   if (i == floor(i))
     % gerade i
      r = text(i-0.1,-0.015,num2str(f_w(i)));
      set(r,'rotation', 90)
   end  
end


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?

Vielen Dank.
kanrf 1.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.09.2015, 10:46     Titel:
  Antworten mit Zitat      
Hallo knarf 1.,

Zitat:
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:
Code:

h2 = axes('Position, [0.3 0.5 0.4 0.2]);
plot(Sensor_D_4,Z)


Zitat:
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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
knarf 1.
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 28.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2015, 12:03     Titel:
  Antworten mit Zitat      
Hi Jan!
mit deinem letzten post hast du mir einiges an Verständnis vermittelt.
Ich werde jetzt try an error machen.

eine frage habe ich jedoch gerade noch.
wie bekomme ich die units für
Code:
h1 = annotation('textbox',[0.280 0.799 0.439 0.2],'LineWidth',1,'String','Hallo');
 

auf centimeter gestellt?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
knarf 1.
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 28.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2015, 20:15     Titel:
  Antworten mit Zitat      
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.0 29.7],'Position',[0 0 21.0 29.7],'PaperPosition',[0 0 21.0 29.7]);
ax = axes('ActivePositionProperty','position','units','centimeters','Position',[0.5 0.5 19.5 29.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.

Grüße

test.pdf
 Beschreibung:

Download
 Dateiname:  test.pdf
 Dateigröße:  1.13 KB
 Heruntergeladen:  340 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.10.2015, 12:35     Titel:
  Antworten mit Zitat      
Hallo knarf 1.,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.