Wolfram mathematica FindDivision[]未按规定工作
是在Mma v7中添加的,这似乎是一种为绘图获得灵活刻度的好方法。参见示例及其答案 用法示例: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
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,可能是在实现中,尽管有时使用重复的值可能很有用。(它对于构建不同级别的分区肯定很有用。) 对于滴答声,我可能会使用如下代码:
{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”]
,尽管它可能会在刻度中引入不需要的间隙。