Wolfram mathematica FindDivision[]未按规定工作

Wolfram mathematica FindDivision[]未按规定工作,wolfram-mathematica,Wolfram Mathematica,是在Mma v7中添加的,这似乎是一种为绘图获得灵活刻度的好方法。参见示例及其答案 用法示例: f[fd_] := Join[ {#, #, {.07, 0}, Directive[Black, Thickness[.01]]} & /@ fd[[1]], {#, #, {.05, 0}, Directive[Black, Thin]} & /@ Flatten[fd[[2]]]]; plot[pr_List] := Plot[Sin

是在Mma v7中添加的,这似乎是一种为绘图获得灵活刻度的好方法。参见示例及其答案

用法示例:

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}]

一切似乎都很好。
但有一个小问题:

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}]

正如您所看到的,红色和黑色记号是重叠的。那是因为

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[]文档说明:

因此,有两个问题:

  • 这是一个bug,还是我做错了什么(或理解错了什么)
  • 有没有简单的方法来删除多级结构中重复的记号

  • 这是一个bug,可能是在实现中,尽管有时使用重复的值可能很有用。(它对于构建不同级别的分区肯定很有用。)

    对于滴答声,我可能会使用如下代码:

    {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, {{}}]
    

    谢谢@Brett。对于
    FindDivisions[{0,2},{2,4,2}]
    ,它是如何工作的?答案已更新,尽管我不关心它在本例中为第三级找到的分区……似乎对于
    FindDivisions[{0,1},{3,3,3}]
    ,值
    1/2
    在第三级列表中会重复出现,因为第二级分区共享一个间隔(2/5,3/5)跨过第一部分中的1/2。这是由于文档中的“第一个和最后一个数字可能稍微超出x_min到x_max范围”注释的结果。您可以尝试
    FindDivisions[{0,1},{3,3},Method->“Legacy”]
    ,尽管它可能会在刻度中引入不需要的间隙。