Ich möchte Rasterlinien verwenden, um einen Effekt zu erzeugen, der Millimeterzeichenpapier in einem 2D-Diagramm, um zu zeigen, wie eine Funktion mit mehreren Variablen von einer Variablen abhängt. Die Skalen der verschiedenen Variablen sind sehr unterschiedlich, so dass mein naiver Ansatz (den ich zuvor verwendet habe) nicht zu funktionieren scheint.
Ein Beispiel dafür, was ich im Moment habe:
<< ErrorBarPlots`
Cmb[x_, y_, ex_, ey_] := {{N[x], N[y]}, ErrorBar[ex, ey]};
SetAttributes[Cmb, Listable];
ELP[x_, y_, ex_, ey_, name_] :=
ErrorListPlot[
Cmb[x, y, ex, ey],
PlotRange -> FromTo[x, y],
PlotLabel -> name,
Joined -> True, Frame -> True, GridLines -> GetGrid,
ImageSize -> {600}
]
Beide FromTo
(ich möchte 5% Rand im Rahmen lassen) und GetGrid
nicht genau so funktionieren, wie ich es möchte.
Auf einigen Achsen unterscheiden sich die Variablen um mehrere 10er Ordnungen. Und ich möchte nicht, dass eine Achse viele Ordnungen von 10 Gitterlinien mehr als andere hat. Und vor allem möchte ich, dass die Rasterlinien mit den Ticks übereinstimmen.
Beispielhafte Daten:
ELP[
{4124961/25000000, 27573001/100000000, 9162729/25000000, 44635761/
100000000, 15737089/25000000, 829921/1562500, 4405801/4000000,
23068809/25000000, 329386201/100000000, 58079641/100000000},
{1/10, 1/5, 3/10, 2/5, 3/5, 1/2, 1/2, 1/2, 1/2, 1/2},
{2031/(250000 Sqrt[10]), 5251/(500000 Sqrt[10]), 3027/(
250000 Sqrt[10]), 6681/(500000 Sqrt[10]), 3967/(250000 Sqrt[10]),
911/(62500 Sqrt[10]), 2099/(100000 Sqrt[10]), 4803/(
250000 Sqrt[10]), 18149/(500000 Sqrt[10]), 7621/(500000 Sqrt[10])},
{1/2000, 1/1000, 3/2000, 1/500, 3/1000, 1/400, 1/400, 1/400, 1/400,
1/400},
"T2, m"
]
Würde dazu führen:
Und mein naives GetGrid, das funktioniert in gewissem Sinne:
FromTo[x_, y_] := Module[{dx, dy},
dx = (Max[x] - Min[x])*0.1;
dy = (Max[y] - Min[y])*0.1;
{{Min[x] - dx, Max[x] + dx}, {Min[y] - dy, Max[y] + dy}}];
GetGrid[min_, max_] := Module[{step, i},
step = (max - min)/100;
Table[
{min + i*step,
If[Equal[Mod[i, 10], 0],
Directive[Gray, Thick, Opacity[0.5]],
If[Equal[Mod[i, 5], 0],
Directive[Gray, Opacity[0.5]],
Directive[LightGray, Opacity[0.5]]
]]},
{i, 1, 100}]
]
Frage
Wie lassen sich GridLines mit Zecken ausrichten?
edit: Mit
GetTicks[x_, y_] := Module[{dx, dy},
dx = (Max[x] - Min[x])*0.1;
dy = (Max[y] - Min[y])*0.1;
{
Min[x] - dx + Table[i*dx*1.2, {i, 1, 9}],
Min[y] - dy + Table[i*dy*1.2, {i, 1, 9}]
}];
ELP[x_, y_, ex_, ey_, name_] :=
ErrorListPlot[
Cmb[x, y, ex, ey],
PlotRange -> FromTo[x, y],
PlotLabel -> name,
Joined -> True, Frame -> True, GridLines -> GetGrid,
FrameTicks -> GetTicks[x, y],
ImageSize -> {600},
AspectRatio -> 1
]
Ich kann bekommen:
Und das ist schon viel besser. Aber ich möchte das Gitter verschieben und nicht die Zecken.
bearbeiten: @Sjoerd C. de Vries
Ihre Lösung tut das, was ich archivieren wollte und funktioniert. Ich habe auch bemerkt, dass, wenn ich die ersten 5 Elemente der Beispieldaten nehme, das Diagramm so aussehen wird (die Elemente werden sortiert und die Regressionslinie wird hinzugefügt).
Beachten Sie, dass das linke Element aus dem Raster fällt.