FindDivisions []无法正常工作

时间:2011-06-16 14:55:33

标签: wolfram-mathematica

在Mma v7中添加了

FindDivisions[ ],这似乎是一种很好的方法来获得灵活的情节。请参阅示例this question及其答案。

用法示例:

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], Evaluate@Join[{x}, pr], Ticks -> {f[FindDivisions[pr, {2,5}]]}]

plot[{0, 10}]

enter image description here

一切似乎都正确。
但是有一个小故障:

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], Evaluate@Join[{x}, pr], Ticks -> {f[FindDivisions[pr, {2,5}]]}]
plot[{0, 10}]

enter image description here

如您所见,红色和黑色的蜱是叠加的。那是因为

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

你可以看到第一个列表中的数字(主刻度)在第二个列表中重复 但是,FindDivisions []文档声明:

enter image description here

所以,有两个问题:

  1. 这是一个错误,还是我在做(或理解)错误?
  2. 以多种 easy 方式删除多层结构中的重复刻度?

1 个答案:

答案 0 :(得分:5)

这是一个错误,可能在实现中,尽管有重复的值有时可能会有用。 (这对于构建不同级别的划分肯定是有用的。)

对于刻度,我可能会使用如下代码:

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

展平层次结构并删除重复项。


广义,更多层次而不仅仅是两个:

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