如何在Mathematica绘图中选择坐标轴上显示的数字?

4

我已经查看了Mathematica文档中心中的所有示例和设置,但找不到任何关于如何选择将显示在轴上的数字的示例。

如何将绘图轴编号从2、4、6等更改为PI、2PI、3PI等?


你可能会发现这篇相关的博客文章很有用(后半部分是关于Ticks的):http://blog.wolfram.com/2011/03/31/mathematica-qa-plotting-trig-functions-in-degrees/ - Andrew Moylan
3个回答

8

如果您希望标签Pi2 Pi等出现在Pi2 Pi等处,则Howard已经给出了正确的答案。

有时您可能想在特定值处使用替代刻度标签,而不重新缩放数据。

文档中的其他示例之一展示了如何实现:

Plot[Sin[x], {x, 0, 10}, 
 Ticks -> {{{Pi, 180 \[Degree]}, {2 Pi, 360 \[Degree]}, {3 Pi, 
  540 \[Degree]}}, {-1, 1}}]

enter image description here

我有一套用于格式化 Ticks 的小型自定义函数,可以按照自己的需求进行格式化。如果你刚开始学习,这可能是过多的信息,但如果需要,你可以使用任何数字格式并替换 ticks 中的任何内容。

myTickGrid[min_, max_, seg_, units_String, len_?NumericQ, 
  opts : OptionsPattern[]] := 
 With[{adj = OptionValue[UnitLabelShift], bls = OptionValue[BottomLabelShift]}, 
Table[{i, 
If[i == max, 
 DisplayForm[AdjustmentBox[Style[units, LineSpacing -> {0, 12}], 
   BoxBaselineShift ->  If[StringCount[units, "\n"] > 0, adj + 2, adj]]], 
 If[i == min, 
  DisplayForm@AdjustmentBox[Switch[i, _Integer, 
     NumberForm[i, DigitBlock -> 3, 
      NumberSeparator -> "\[ThinSpace]"], _, N[i]], 
    BoxBaselineShift -> bls], 
  Switch[i, _Integer, NumberForm[i, DigitBlock -> 3, 
    NumberSeparator -> "\[ThinSpace]"], _, N[i]]]], {len, 0}}, {i,
 If[Head[seg] === List, Union[{min, max}, seg], Range[min, max, seg]]}]]

以及设置:

Options[myTickGrid] = {UnitLabelShift -> 1.3, BottomLabelShift -> 0}
SetOptions[myTickGrid, UnitLabelShift -> 1.3, BottomLabelShift -> 0]

例子:

Plot[Erfc[x], {x, -2, 2}, Frame -> True, 
 FrameTicks -> {myTickGrid[-2, 2, 1, "x", 0.02, UnitLabelShift -> 0], 
   myTickGrid[0, 2, {0.25, .5, 1, 1.8}, "Erfc(x)", 0.02]}]

enter image description here


5
你可以在这里找到一个示例:
Ticks -> {{Pi, 2 Pi, 3 Pi}, {-1, 0, 1}}

能否自动生成PI、2PI等数字,而不需要指定数字集的总数?谢谢~ - sam
这将自主生成刻度,但您仍需要指定最大 x 值:xmax = 10; Plot[Sin[x], {x, 0, xmax}, Ticks -> {Pi*Range[xmax/Pi], {-1, 1}}] - Chris Degnen

3

Ticks 还可以接受一个函数作为参数,这样你就不必手动列出每个刻度点或每次更改最大值时都要修改刻度了。以下是一个示例:

xTickFunc[min_, max_] := 
 Table[{i, i, 0.02}, {i, Ceiling[min/Pi] Pi, Floor[max/Pi] Pi, Pi}]
Plot[Sinc[x], {x, -5 Pi, 5 Pi}, Ticks -> {xTickFunc, Automatic}, 
 PlotRange -> All]

enter image description here

如果您希望在自定义刻度方面具有更大的灵活性,可以考虑使用LevelScheme


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接