DMUG-Archiv 2003

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

Re: Grafik - Achsen

Lieber Udo, Hans und Jens:

Herzlichen Dank für Eure Hinweise!

Natürlich muss die Funktion dann auch entsprechend abgebildet werden. In
meinem Falle habe ich ein vertikales Temperaturprofil in einem
Permafrostboden berechnet: T(z,t), wobei z die Tiefe im Boden bezeichnet.
Ich möchte nun die Form der Profile für mehrere Zeitpunkte zeichnen. In
diesem Falle nimmt man intuitiv für z die Vertikalachse und lässt die Werte
nach unten zunehmen.

Wie von Euch vorgeschlagen habe ich mich mit ParametricPlot und der
TickFunction aus dem Paket EnhancedGraphics beholfen:

Needs["Graphics`EnhancedGraphics`"];

ParametricPlot[Evaluate[Map[{T[100 - z, #], z} &, {0, 5, 10, 15, 20}]], {z,
0, 100}, PlotRange -> All, FrameTicks -> {Automatic, (TickFunction[#1, #2,
TextFunction -> Reverse, TickNumbers -> {8, 64}] &), TicksOnly, TicksOnly}]

Das Resultat ist soweit ok, auch wenn die Ticks an der linken Achse nicht
gleich derjenigen auf der rechten Achse sind.

Intuitiv würde ich meinen, dass man die Spiegelung der Darstellung in der
vertikalen Richtung einfach durch Vertauschen der Minimal- und Maximalwerte
bei der PlotRange Option erreichen sollte, z.B. in meinem Beispiel durch
PlotRange->{All,{100,0}}. Dies funktioniert so ganz einfach in einem
wissenschaftlichen Grafikpaket, das ich manchmal benutze (Igor). Mma dreht
aber den Spiess in jedem Falle um und erlaubt nur positiv zunehmende Werte.
Wer weiss, vielleicht in MMa V7 wird es dies geben.

Mit freundlichem Gruss,
Martin



On 22.10.2003 23:23, "Udo und Susanne Krause" <su.krause@XXXXXXX.ch> wrote:

> Hallo Martin,
> 
> da ich noch mit Mma 4.2 zufrieden bin, weiss ich nicht, ob es jetzt in Mma 5.0
> etwa eine PlaneOrientation-> Reverse Option unter den Grafikoptionen gibt. Das
> Umprogrammieren für 2D sieht so aus:
> 
> Remove[heimannGraphics2D];
> heimannGraphics2D[f_, rl_List, ol_List] :=
> Module[{htInv = False, vtInv = False, ffInv = False, g},
>     (* get users spec *)
>     If[Length[Cases[ol, hInv]] == 1, htInv = True];
>     If[Length[Cases[ol, vInv]] == 1, vtInv = True];
>     If[Length[Cases[ol, fInv]] == 1, ffInv = True];
>     (* get the hard work done *)
>     g = Plot[f, rl, PlotRange -> All, DisplayFunction -> Identity];
>     hticks = AbsoluteOptions[g, Ticks][[1, 2, 1]];
>     vticks = AbsoluteOptions[g, Ticks][[1, 2, 2]];
>     vals = FullForm[g][[1, 1, 1, 1, 1]];
>     (* rebuild the graphics *)
>     If [htInv, (* truly ugly *)
>       ll = Transpose[hticks][[2]];
>       l1 = Join[Reverse[Select[ll, NumberQ]], Take[ll, Length[Select[ll,
> NumberQ]] - Length[ll]]];
>       hticks = Transpose[ReplacePart[Transpose[hticks], l1, 2]]
>       ];
>     If[vtInv,
>       ll = Transpose[vticks][[2]];
>       l1 = Join[Reverse[Select[ll, NumberQ]], Take[ll, Length[Select[ll,
> NumberQ]] - Length[ll]]];
>       vticks = Transpose[ReplacePart[Transpose[vticks], l1, 2]]
>       ];
>     If[ffInv, vals = Transpose[RotateLeft[Transpose[vals]]]];
>     (* plot *)
>     Show[ Graphics[Line[vals], Ticks -> {hticks, vticks}], Axes -> True,
>            DisplayFunction -> $DisplayFunction, PlotRange -> All]
>     ] /; VectorQ[rl]
> 
> Dann erhaelt man mit
> heimannGraphics2D[SinIntegral[x], {x, 0, 10}, {}]
> das eine Bild (siehe Anhang) mit sinnvollen Ticks, und mit
> heimannGraphics2D[SinIntegral[x], {x, 0, 10}, {hInv, vInv}]
> das andere Bild (siehe ebenso Anhang) mit sinnwidrigen Ticks.
> 
> Die Frage ist nur, wozu kann man das brauchen? Wenn das ueberhaupt Sinn machen
> soll, muesste die Funktion entsprechend abgebildet werden. Das wuerde ich
> Ihnen
> gern ueberlassen.
> 
> Mit den besten Grüssen
> Udo.
> 
> Martin Heimann schrieb:
> 
>> Liebe Kollegen,
>> 
>> 2 simple Fragen:
>> 
>> (1) Wie kriege ich MMa dazu, bei Plot oder ListPlot den Wertebereich einer
>> Achse umzukehren, d.h. von positiven zu negativen Werten zu laufen? Klar,
>> man könnte die Beschriftungen der Achse oder des Frames neu programmieren,
>> aber gibt es nicht einen einfacheren Weg?
>> 
>> (2) Wie spiegle ich eine Plot-Grafik? d.h. ich habe ein Funktion y=f(x) die
>> ich darstellen möchte, wobei aber die x-Achse vertikal und die y-Achse
>> horizontal ausgerichtet sein sollen. Klar, ich könnte f(x) invertieren und
>> dann die inverse Funktion zeichnen; aber geht dies nicht einfacher?
>> 
>> Gruss,
>> Martin
> 

-- 

--> !!PLEASE NOTE NEW STREET ADDRESS!! <--

Max-Planck-Institut fuer Biogeochemie
Postfach 100164, D-07701 Jena, Germany
Street Address:  Beutenberg Campus, Hans-Knoell-Straße 10, D-07745 Jena
Office: +49-3641-57-6350/6301
Mobile: +49-170-6307299
Home: +49-3641-618254
Fax.: +49-3641-57-7300
Email: martin.heimann@XXXXXXX.de
Web: http://www.bgc-jena.mpg.de/~martin.heimann
Homepage of TCOS-Siberia (http://www.bgc.mpg.de/public/carboeur/web_TCOS)
Editor Atmospheric Chemistry and Physics (http://www.atmos-chem-phys.org)



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

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