DMUG-Archiv 2006

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: maßstäbliche ContourPlots

Hallo Udo,

besten Dank auch für Ihre Geduld.

Es muß doch (hoffentlich) noch eine elegantere Lösung geben.

Das Problem drängt sich mir förmlich auf.
Wenn ich z. B. den Grundriß meiner Küche auf ein Blatt Papier zeichne
und auf ein anderes Blatt den Grundriß vom Wohnzimmer,
so will ich doch in den meisten Fällen, dass der gleiche Tisch auf
beiden Blättern gleich groß erscheint.

Ich habe in den folgenden ContourPlots noch ImageSize hinzugefügt.

g1=ContourPlot[f[x,y,0],{x,-3,3},{y,0,2},AspectRatio\[Rule]Automatic,
     PlotRange\[Rule]{{-3,3},{0,2},{-10,10}},
     FrameLabel\[Rule]{"x in m","y in m"},ImageSize\[Rule]250];
g2=ContourPlot[f[0,y,z],{y,0,2},{z,0,3},AspectRatio\[Rule]Automatic,
     PlotRange\[Rule]{{0,2},{0,3},{-10,10}},
     FrameLabel\[Rule]{"y in m","z in m"},ImageSize\[Rule]250];
g3=ContourPlot[f[x,0,z],{x,-3,3},{z,0,3},AspectRatio\[Rule]Automatic,
     PlotRange\[Rule]{{-3,3},{0,3},{-10,10}},
     FrameLabel\[Rule]{"x in m","z in m"},ImageSize\[Rule]250];

Lösungsidee: Nehmen wir das Tick von g1 auf der horizontalen Achse welches zu x = 0 und welches zu x = 1 gehört. Gibt es irgend eine Möglichkeit herauszubekommen, welchen Abstand diese beiden Ticks in Bezug auf die 250 Einheiten haben?

Wenn ich diesen Abstand für g1, g2, g3 wüßte, dann müßte ich nachträglich nur noch einmal die ImageSize von g2 und g3 ändern
und hätte das Problem gelöst.

Haben Sie hierzu noch eine Idee oder ist das eine Sackgasse?

Mit freundlichen Gruessen / Best Regards
Prof. Dr.-Ing. Reinhard Schlosser

Fachhochschule Deggendorf
Fachbereich Elektrotechnik und Medientechnik
Edlmairstrasse 6 + 8
94469 Deggendorf
Tel 0991-3615-515
Fax 0991-3615-599
reinhard.schlosser@XXXXXXX.de
http://www.fh-deggendorf.de



Udo und Susanne Krause schrieb:

Hallo Reinhard,

> Gleiches AspectRatio für alle ContourPlots macht die Sache für mich nur noch schlimmer.
Nun habe ich es auch einmal verstanden. Besten Dank für Ihre Geduld.

Man könnte meinen, es mit
In[32]:=
Clear[g1, g2, g3];
g1 = ContourPlot[f[x,y,0], {x,-3,3},{y,0,2}, AspectRatio -> Automatic, FrameLabel -> {"x in m","y in m"}]; g2 = ContourPlot[f[0,y,z], {y,0,2},{z,0,3}, AspectRatio -> Automatic, FrameLabel -> {"y in m","z in m"}]; g3 = ContourPlot[f[x,0,z], {x,-3,3},{z,0,3}, AspectRatio -> Automatic, FrameLabel -> {"x in m","z in m"}];

In[133]:=
Clear[x11, x12, x21, x22, x31, x32, y11, y12, y21, y22, y31, y32];
{{x31, x32}, {y31, y32}} = Most[(AbsoluteOptions[g3, PlotRange] /. Rule -> List)[[1, 2]]]; {{x21, x22}, {y21, y22}} = Most[(AbsoluteOptions[g2, PlotRange] /. Rule -> List)[[1, 2]]]; {{x11, x12}, {y11, y12}} = Most[(AbsoluteOptions[g1, PlotRange] /. Rule -> List)[[1, 2]]]; Show[Graphics[{Rectangle[{x11, Abs[y21] + y22 + y32}, {x12, Abs[y11] + Abs[y21] + y12 + y22 + y32}, g1], Rectangle[{x21, y32}, {x22, Abs[y21] + y22 + y32}, g2], Rectangle[{x31, y31}, {x32, y32}, g3]}, AspectRatio -> Automatic]]

hinzubekommen. Das ist aber - wie bereits in der Gruppe (etwa vergang. Jahr) im Zusammenhang mit GraphicsArray[] diskutiert - nicht der Fall, und zwar wegen des Spruchs: "The rectangle is taken as the complete display area in which the graphics object is rendered." aus der Hilfe von Rectangle[]. Wenn man das Bildchen anschaut, sieht man, dass g2 wohl in der Mitte anfängt - aber es fängt nicht der ContourPlot dort (bei x = 0.) an, sondern die linke Seite der y-Legende von g2. Auch die 0. von g3 ist aus demselben Grund nicht in der Mitte.

Deshalb könnte man in einem ersten Schritt auf die Legenden verzichten, ebenso wie auf die FrameTicks, um symmetrische Objekte in der complete display area zu erzeugen

In[124]:=
Clear[g4, g5, g6];
g4 = ContourPlot[f[x,y,0], {x,-3,3},{y,0,2}, AspectRatio -> Automatic, FrameTicks -> None]; g5 = ContourPlot[f[0,y,z], {y,0,2},{z,0,3}, AspectRatio -> Automatic, FrameTicks -> None]; g6 = ContourPlot[f[x,0,z], {x,-3,3},{z,0,3}, AspectRatio -> Automatic, FrameTicks -> None];

diese dann zueinander koordinieren

In[138]:=
Clear[x41, x42, x51, x52, x61, x62, y41, y42, y51, y52, y61, y62];
{{x61, x62}, {y61, y62}} = Most[(AbsoluteOptions[g6, PlotRange] /. Rule -> List)[[1, 2]]]; {{x51, x52}, {y51, y52}} = Most[(AbsoluteOptions[g5, PlotRange] /. Rule -> List)[[1, 2]]]; {{x41, x42}, {y41, y42}} = Most[(AbsoluteOptions[g4, PlotRange] /. Rule -> List)[[1, 2]]]; Show[Graphics[{Rectangle[{x41, Abs[y51] + y52 + y62}, {x42, Abs[y41] + Abs[y51] + y42 + y52 + y62}, g4], Rectangle[{x51, y62}, {x52, Abs[y51] + y52 + y62}, g5], Rectangle[{x61, y61}, {x62, y62}, g6]}, AspectRatio -> Automatic (*, Frame -> True, FrameLabel -> "aLabel", ... *)]]

nun verschieben keine Legenden, Zahlen und ähnlicher "Schnickschnack" die Grafiken mehr in der "complete display area" und es passt. Anschliessend, im Verfolg von AspectRatio, muss man die Ticks und Labels alle selbst eintragen, dazu holt man sie mittels der AbsoluteOptions aus den Einzelgraphiken, setzt sie richtig zusammen und liefert sie ab. Das geht schon - aber macht dass Spass?

Gruss
Udo.

reinhard schlosser wrote:

danke für Deine Hinweise, aber ich will gar nicht "die gleiche Höhe und Breite aller drei Bilder erreichen" Gleiches AspectRatio für alle ContourPlots macht die Sache für mich nur noch schlimmer.





Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html