2012-01-16 5 views
8

¿Es posible recuperar un rango de trazado generado automáticamente en Mathematica?Recuperando rango de trazado generado automáticamente

Por ejemplo, si tuviera que hacer:

Plot[Sin[x], {x, 0, 2 \[Pi]}, PlotRange -> Automatic] 

entonces me gustaría saber que el rango del eje Y era -1 a 1 y el rango del eje X era 0 a 2 Pi.

Respuesta

14
p = Plot[Sin[x], {x, 0, 2*Pi}, PlotRange -> Automatic]; 

AbsoluteOptions es un poco de una lotería, pero funciona en este caso

AbsoluteOptions[p, PlotRange] 
{PlotRange -> {{0., 6.28319}, {-1., 1.}}} 

Aunque AbsoluteOptions reemplazado FullOptions a veces es también vale la pena probar si y cuando FullOptionsAbsoluteOptions falla porque me he encontrado con casos en los que falla pero AbsoluteOptionsFullOptions obras. En este caso también funciona FullOptions:

FullOptions[p, PlotRange] 
{{0., 6.28319}, {-1., 1.}} 
+0

¡Bingo! Esa es una respuesta más completa que la que acabo de dar arriba. – kkm

+0

Eso es exactamente lo que estaba buscando. ¡Gracias! – Cassini

+0

¿Cuál es su opinión sobre el simple ajuste de patrones 'PlotRange' en el' FullForm' de 'p'? He tenido problemas con 'AbsoluteOptions' en el pasado (quizás debido a que no entiendo cómo funciona), así que ahora tiendo a evitar usarlo en favor de la coincidencia de patrones de fuerza bruta como en mi respuesta. – acl

3

No es bonita o general, pero se puede por fuerza bruta le gusta esto:

p = Plot[Sin[x], {x, 0, 2*Pi}, PlotRange -> Automatic]; 
[email protected][p, List[___, Rule[PlotRange, x_], ___] -> x] 

dando

{{0., 6.28319}, {-1., 1.}} 

Puede resolver esto examinado FullForm[p]

2

Utilice la función AbsoluteOptions, q. v. en los documentos. gráficos

In[56]:= x = Plot[Sin[x], {x, 0, 2 \[Pi]}, PlotRange -> Automatic]; 
     AbsoluteOptions[x, PlotRange] 

Out[57]= {PlotRange -> {{0., 6.28319}, {-1., 1.}}} 
1

acl Al igual que a menudo se entierran en el fullform con la Posición de postproceso:

por ejemplo, Encontrar y modificar PlotRange:

p = Plot[Sin[x], {x, 0, 2 \[Pi]}, PlotRange -> Automatic]; 
rpos = Position[p, PlotRange]; 
Print["Initial PlotRange"]; 
p[[Sequence @@ Most[First[rpos]]]] 
Print["Modified PlotRange"]; 
p[[Sequence @@ Most[First[rpos]]]] = PlotRange -> {{0, Pi}, {-1, 1}} 
Print[p] 

O, colores que modifican:

p = Plot[{Sin[x], Cos[x]}, {x, 0, 2 \[Pi]}, PlotRange -> Automatic]; 
hpos = Position[p, Hue]; 
Print["Initial colours"] 
p[[Sequence @@ Most[#]]] & /@ hpos 
Print["New colours"] 
MapThread[(p[[Sequence @@ Most[#1]]] = #2) &, {hpos, {Green, Orange}}] 
Print[p] 
2

me puede sugerir la siguiente Ticks Hack:

pl = Plot[Sin[x], {x, 0, 10}]; 
Reap[Rasterize[Show[pl, Ticks -> {Sow[{##}] &, Sow[{##}] &}], 
    ImageResolution -> 1]][[2, 1]] 

=> {{-0.208333, 10.2083}, {-1.04167, 1.04167}} 

El truco es que el verdadero PlotRange está determinado por el frontend , no por el Kernel. Por lo tanto, debemos forzar a FrontEnd a representar los gráficos para que se evalúen las funciones de marcación. Este truco proporciona el PlotRange completo con el valor explícito de PlotRangePadding agregado.

Más solución general teniendo en cuenta la posibilidad de que pl tiene valor no estándar de DisplayFinction opción y que puede haber Axes opción se ajusta a False:

completePlotRange[plot_] := 
[email protected]@ 
    Reap[Rasterize[ 
    Show[plot, Ticks -> (Sow[{##}] &), Axes -> True, 
     DisplayFunction -> Identity], ImageResolution -> 1]] 

En la página de documentación para PlotRange bajo la "Más información" se puede leer una nota importante sobre AbsoluteOptions: "AbsoluteOptions da la forma explícita de PlotRange especificaciones cuando Automatic se los ajustes se dan "(resaltar es mío). Por lo tanto, parece que la Documentación no garantiza que AbsoluteOptions dará valores correctos para PlotRange cuando no sea Automatic para todas las coordenadas.

+0

Hola Alexey, la mayoría de nosotros estamos activos en el nuevo sitio ahora, mira aquí: http://mathematica.stackexchange.com/ ¡Sería genial si pudieras unirte también! – Szabolcs

+0

@Szabolcs Gracias, ya estoy allí. –

Cuestiones relacionadas