在ListLogLogPlot的tick标签中强制使用科学记数法

Leo*_*yev 7 wolfram-mathematica

我正在尝试在ListLogLogPlot上自定义格式标签.通过搜索Mathgroup存档,看起来混乱使用刻度标签的常用方法是使用AbsoluteOptions自定义格式运行替换规则,然后使用该Ticks->{...}选项将它们显式地提供给绘图函数.但是,以下内容对ListLogLogPlot不起作用:

foo = ListLogLogPlot[Range[20]^3, Frame -> True];
ticks=(FrameTicks /. AbsoluteOptions[foo, FrameTicks])
Run Code Online (Sandbox Code Playgroud)

关于如何处理这个问题的任何想法?


编辑:这里有很多好的答案!接受Wizard先生,因为它被证明是解决眼前问题的最简洁方法,但我发现自己使用了将来建议的其他方法.

Mr.*_*ard 7

可以使用替换件直接弄乱标签,绕过Option/ AbsoluteOptions:

ListLogLogPlot[Range[20]^3, Frame -> True] /.
   (FrameTicks -> x_) :>
      (FrameTicks -> (x /. {a_?NumericQ, b_Integer, s___} :>
         {a, Superscript[10, Log10@b], s} ))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


感谢Alexey Popkov,现在它已经改善,不那么脆弱了.

  • @Alexey遗憾的是编辑评论员并不知道我们想要什么.我会自己编辑.唯一的解决方案是让我对您的问题进行投票,以便您尽快达到2000个代表.:-) (2认同)

Bre*_*ion 5

和Sjoerd一样,我通常更喜欢编写一个能够动态计算刻度的函数:

PowerTicks[label_][min_, max_] := Block[{min10, max10},
  min10 = Floor[Log10[min]];
  max10 = Ceiling[Log10[max]];
  Join[Table[{10^i, 
     If[label, Superscript[10, i], Spacer[{0, 0}]]}, {i, min10, 
     max10}],
   Flatten[
    Table[{k 10^i, 
      Spacer[{0, 0}], {0.005, 0.`}, {Thickness[0.001`]}}, {i, min10, 
      max10}, {k, 9}], 1]]
  ]

ListLogLogPlot[Range[20]^3, Frame -> True, 
 FrameTicks -> {{PowerTicks[True], 
    PowerTicks[False]}, {PowerTicks[True], PowerTicks[False]}}]
Run Code Online (Sandbox Code Playgroud)


rco*_*yer 5

为了补充Brett的答案,请查看LevelScheme中的CustomTicks包.它提供了两个用于生成刻度线'LinTicks LogTicks`的函数,每个函数都有许多格式化选项.目前,它要求您自己执行对数,即and

Plot[ {Log[10,Cosh[x]], Log[10, Sinh[x]]}, {x, 0, 4}, Frame -> True,
      FrameTicks -> { LinTicks, LogTicks, None, None }]
Run Code Online (Sandbox Code Playgroud)

cosh和sinh的LogPlot超过0到4

对于数据的列表,显然你必须使用Log[Base, data]ListPlot,但它是可行的.我已经向Mark Caprio提交了一个补丁,以便以下内容与上面完全相同

LogPlot[ {Cosh[x], Sinh[x]}, {x, 0, 4}, Frame -> True,
      FrameTicks -> { LinTicks, LogTicks, None, None }]
Run Code Online (Sandbox Code Playgroud)

如果补丁被接受的旧形式,LogTicks将通过设置选项来获得PlotTypeLinear,Logarithmic是默认的.使用的优点CustomTicks是其他基础很容易

Exp [-x ^ 2]的代码和绘图从0到3

它会像你想要的那样自动格式化.

编辑:我还想指出,它CustomTicks本身可以加载,与其余部分分开LevelScheme.并且,因为它是一个小包装,所以没有太多额外的开销.