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}]
一切似乎都正确。
但是有一个小故障:
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 []文档声明:
所以,有两个问题:
答案 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, {{}}]