2011-06-16 12 views
6

FindDivisions[ ] se agregó en Mma v7, y parece una buena manera de obtener ticks flexibles para las parcelas. Ver por ejemplo this question y sus respuestas.FindDivisions [] no funciona como se indica

Ejemplo de uso:

f[fd_] := Join[ 
    {#, #, {.07, 0}, Directive[Black, Thickness[.01]]} & /@ fd[[1]], 
    {#, #, {.05, 0}, Directive[Black, Thin]}   & /@ Flatten[fd[[2]]]]; 
plot[pr_List] := 
    Plot[Sin[x], [email protected][{x}, pr], Ticks -> {f[FindDivisions[pr, {2,5}]]}] 

plot[{0, 10}] 

enter image description here

Y todo parece correcto.
Pero hay un problema técnico:

f[fd_] := Join[ 
    {#, #, {.03, 0}, Directive[Red, Thickness[.01]]} & /@ fd[[1]], 
    {#, #, {.05, 0}, Directive[Black, Thin]}   & /@ Flatten[fd[[2]]]]; 
plot[pr_List] := 
    Plot[Sin[x], [email protected][{x}, pr], Ticks -> {f[FindDivisions[pr, {2,5}]]}] 
plot[{0, 10}] 

enter image description here

Como se puede ver, las garrapatas rojas y negras se superponen. Esto se debe a

FindDivisions[{0, 2}, {2, 4}] 
(* 
-> {{0, 1, 2}, {{0, 1/4, 1/2, 3/4, 1}, {1, 5/4, 3/2, 7/4, 2}}} 
*) 

y se puede ver que los números en la primera lista (las garrapatas principal) se repiten en la segunda lista.
Sin embargo, los FindDivisions [] estados de documentación:

enter image description here

Así, dos preguntas:

  1. Es esto un error, o estoy haciendo (o comprensión) algo mal?
  2. Cualquiera fácil manera de eliminar los tics repetidos en una estructura de varios niveles?

Respuesta

5

Es un error, probablemente en implementación, aunque tener los valores duplicados puede ser útil a veces. (Sin duda, es útil para la construcción de los diferentes niveles de divisiones.)

Para las garrapatas, probablemente haría uso de un código como:

{major, minor} = FindDivisions[{0, 2}, {2, 4}]; 
minor = Complement[Flatten[minor], major]; 

para aplanar la jerarquía y eliminar duplicados.


generalizada, por más niveles que sólo dos:

divs = Flatten /@ FindDivisions[{0, 2}, {2, 4, 2}]; 
Complement[#2, #1] & @@@ Partition[divs, 2, 1, -1, {{}}] 
+0

Gracias @Brett. ¿Cómo funciona para 'FindDivisions [{0, 2}, {2, 4, 2}] '? –

+0

Respuesta actualizada, aunque no me importan las divisiones que encontró para el tercer nivel en este caso ... –

+0

Parece que con 'FindDivisions [{0, 1}, {3, 3, 3}]', el valor '1/2' se repite en la tercera lista –

Cuestiones relacionadas