2011-06-16 1 views
6

FindDivisions[ ] a été ajouté dans Mma v7, et semble être un bon moyen d'obtenir des graduations flexibles pour les graphiques. Voir par exemple this question et ses réponses.FindDivisions [] ne fonctionnait pas comme indiqué

Exemple d'utilisation:

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

Et tout semble bien.
Mais il y a un petit problème:

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

Comme vous pouvez le voir, les tiques rouges et noirs sont superposées. C'est parce que

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

et vous pouvez voir que les chiffres dans la première liste (la principale tiques) sont répétées dans la deuxième liste.
Cependant, les FindDivisions [] documentation indique:

enter image description here

Alors, deux questions:

  1. Est-ce un bug ou que je fais (ou compréhension) quelque chose de mal?
  2. N'importe quel facile comment supprimer les ticks répétés dans une structure à plusieurs niveaux?

Répondre

5

Il s'agit d'un bogue, probablement en cours d'implémentation, même si les valeurs dupliquées peuvent être utiles à certains moments. (Il est certainement utile pour construire les différents niveaux de divisions.)

Pour les tiques, je serais probablement utiliser le code:

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

pour aplatir la hiérarchie et supprimer les doublons.


Généralisée, pour plus de niveaux que deux:

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

Merci @Brett. Comment ça marche pour 'FindDivisions [{0, 2}, {2, 4, 2}]'? –

+0

Réponse mise à jour, bien que je n'aime pas les divisions trouvées pour le troisième niveau dans ce cas ... –

+0

Il semble qu'avec 'FindDivisions [{0, 1}, {3, 3, 3}]', la valeur '1/2' est répété dans la troisième liste –

Questions connexes