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.