2011-06-16 39 views
6

FindDivisions[ ]被添加到Mma v7中,並且似乎是一個很好的方式來獲得靈活的蜱蟲圖。請參閱this question及其答案。FindDivisions []沒有按規定工作

用例:

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

所有的一切都似乎是正確的。
但有一個小故障:

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

正如你所看到的,紅色和黑色蜱疊加。這是因爲

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. 任何容易方式刪除多級結構中的重複滴答?

回答

5

這是一個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, {{}}] 
+0

感謝@Brett。 'FindDivisions [{0,2},{2,4,2}]'是如何工作的? – 2011-06-16 15:40:24

+0

答案更新了,雖然我不在乎它在這種情況下找到的第三個級別的分區...... – 2011-06-16 16:08:58

+0

似乎用'FindDivisions [{0,1},{3,3,3}]',值在第三個列表中重複'1/2' – 2011-06-16 16:35:17