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

Rendering Problem mit 2 x-Achsen

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2011, 18:32     Titel: Rendering Problem mit 2 x-Achsen
  Antworten mit Zitat      
Ich möchte ein loglog-Diagramm eines Spektrums mit 2 Achsen (eine für den Ortsraum unter dem Plot, eine für die Wellenzahl darüber) erstellen.
Das heisst also es ist nur ein Graph, aber dafür muss man in MATLAB 2 Axes erstellen und diese überlagern.

Mit diesem Beitrag hier
http://www.gomatlab.de/plotten-mit-2-x-achsen-aber-wie-t5194.html
bin ich dabei schon so weit vorangekommen, dass ich mittels 'line' sowie 'set(gca,'xscale','log')' 2 deckungsgleiche Graphen hinbekomme, wenn ich vom ersten axes mir mit get(ax(1),'position') die Lage des inneren Rahmens hole und sie auf ax(2), also Axes 2 übertrage.

Nun das Problem: möchte ich in ax(2) ein X-Label(über dem plot) und evtl. noch einen Title einfügen ist ein Teil der Schrift nicht lesbar wird vom oberen Rand ('Outerposition') abgeschnitten.

Habe schon versucht, die Outerposition von ax(2) auf ax(1) zu übertragen, das funktioniert aber nur für eine bestimmte Figuregröße.

Hat vielleicht jemand eine Idee, wie man solche Renderingprobleme lösen kann?
Wäre für jede Hilfe, auch für völlig neue Ansätze dankbar.


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.08.2011, 17:45     Titel: Re: Rendering Problem mit 2 x-Achsen
  Antworten mit Zitat      
Hallo Anonymous,

Hast Du Dir mal PLOTYY angeschaut?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2011, 22:53     Titel:
  Antworten mit Zitat      
Hallo Jan,

wieso plotyy, ich möchte doch eine zweite X-Achse über dem loglog-plot.

Wie schon gesagt, den Graphen plus korrekte X-Achsenbeschriftung (x-ticks, x-ticklabel) unten: Wellenzahl, oben Wellenlänge habe ich bereits hinbekommen.

ABER: Sobald ich etwa im axes 1 (Wellenzahl) einen 'title' einfüge und dann in axes 2 (Wellenlänge) ein 'x-label' über dem Plot, erscheinen beide übereinander, weil der eine axes nichts vom anderen weiß.

Um das Übereinanderschreiben zu vermeiden wollte ich dann sowohl title als auch x-label in axes 2 einfügen, mit dem Erfolg, dass beide nun natürlich untereinander standen, aber vom title fast nichts mehr zu lesen war, weil MATLAB das irgendwie nicht richtig rendert.

Mein Problem ist also: wie kann man MATLAB sagen, das es unabhängig, in welchem axes ich etwas erweitere (ein label oder o.ä.) das jeweils andere axes davon "weiß" ?

Ich vermute, es hat ewas mit den axes properties 'Position', 'OuterPosition' und 'TightInset' zu tun, bin da aber nicht weitergekommen.

Wäre wirklich für jeden konstruktiven Hinweis dankbar.

Gruß Alex
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2011, 04:10     Titel:
  Antworten mit Zitat      
ANMERKUNG: Habe das Problem eingrenzen aber noch nicht lösen können.

Es gibt eine 'Axes Property' namens 'ActivePositionProperty'. Diese legt fest, was beim Ändern des Plots durch Einfügen von Labeln oder aber durch Verändern der Figure-Größe erhalten bleibt:

entweder: 'Outerposition', das ist die äußere Grenze des axes, und wird mit dem Vektor [left bottom width height] angegeben, das mir die relative Lage zum linken, unteren Punkt im Figure beschreibt.

oder: 'Position', das Rechteck des eigentlichen Plots.

Default ist 'Outerposition', d.h. alle Textzusätze, wie Label etc. bleiben beim Resizing erhalten, allerdings kann sich dabei der Position-Vektor ändern.

Bei 'Position' bleibt der entsprechende Vektor, der quasi der Proportion des Plots entspricht, erhalten. Dann können beim Verkleinern der Figure aber Label und Title möglicherweise abgeschnitten werden, wie bei mir passiert.

Ich muß mich jetzt also zwischen Pest und Cholera entscheiden:

Entweder wähle ich 'Position' für meine 2 Axes, Dann bleiben beide Plots immer schön übereinander. ABER die Beschriftung (für eines der Axes) geht teilweise verloren.
Oder eben 'Outerposition': Beschriftung für beide Axes da, ABER die Plots sind nicht mehr übereinander.

Habe bislang keine Idee, was man da machen könnte.
Gruß Alex
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2011, 15:41     Titel:
  Antworten mit Zitat      
Hallo Leute,
hat keiner eine Idee?

Hier ist mal der Code. 2 Vektoren- selbe Länge: s ist Funktion von Wellenzahl k. Ich möchte halt k als eine x-achse und 2*Pi./k als zweite x-achse.

Code:

line(k,s);
set(gca,'xscale','log','yscale','log')
xlim1=get(gca,'xlim');
xlim2=2*Pi./[xlim1(2),xlim1(1)];
ylim1=get(gca,'ylim');
ax(1) = gca;
ax(2)=axes('Position',get(ax(1),'Position'),'XAxisLocation','Top',...
'YAxisLocation','Right','Color','none','XDir','reverse','xscale','log',...
'yscale','log','xlim',xlim2,'ylim',ylim1,'YTick',[]);
line(2*Pi./k,s) % kann man auch weglassen, da identisch mit line(k,s)
% in ax(1)

title('spectral analysis of f')
xlabel(ax(1),'k  [m^{-1}]')
xlabel(ax(2),'[km]')
ylabel(ax(1),'spectral density of f')


Nun ist die 'ActivePositionProperty' von ax(2) auf 'Position' gestellt, während selbige von ax(1) auf 'Outerposition' steht.
Beides sorgt dafür, dass wenn man die Figuregröße ändert, die Plots übereinander bleiben. Nur leider verschwinden die über dem Plot (von ax(2)) stehenden x-label und title unter dem Toolbar der Figure.

Hat noch niemand ein ähnliches Problem gehabt? Rolling Eyes
 
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.