Cuadrículas adaptativas
Quiero usar líneas de cuadrícula para crear un efecto de papel cuadriculado milimétrico en un gráfico 2d, para mostrar cómo la función multivariable depende de 1 variable. Las escalas de las diferentes variables difieren mucho, por lo que mi enfoque ingenuo (que he usado antes) no parece funcionar.
Ejemplo de lo que tengo en este momento:
<< 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}
]
AmbosFromTo
(Quiero dejar un margen del 5% en el marco) yGetGrid
no funcionan exactamente como quiero que lo hagan.
En algunos ejes, las variables difieren en muchos órdenes de 10. Y no quiero que un eje tenga muchos órdenes de 10 líneas de cuadrícula más que otro. Y lo más importante, quiero que las líneas de la cuadrícula se alineen con las garrapatas.
Data de muestra
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"
]
Daría como resultado:
Y mi ingenuo GetGrid, que funciona de alguna manera:
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}]
]
Pregunt¿Cómo hacer que GridLines se alinee con ticks?
edit: con
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
]
Puedo conseguir
Y eso es mucho mejor. Pero me gustaría cambiar la cuadrícula y no las garrapatas.
edit: @Sjoerd C. de Vries
Su solución hace lo que quería archivar y funciona. También noté que si tomo los primeros 5 elementos de datos de muestra, entonces el gráfico será (los elementos se ordenan y se agrega la línea de regresión). @
Observe que el elemento más a la izquierda es como fuera de la red.