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

时间:2011-04-14 20:10:46

标签: wolfram-mathematica

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

Ticks->{...}

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


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

5 个答案:

答案 0 :(得分:7)

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

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

enter image description here


感谢Alexey Popkov,现在这种情况有所改善,而且不那么脆弱。

答案 1 :(得分: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]}}]

答案 2 :(得分:5)

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

Plot[ {Log[10,Cosh[x]], Log[10, Sinh[x]]}, {x, 0, 4}, Frame -> True,
      FrameTicks -> { LinTicks, LogTicks, None, None }]

给出

LogPlot of cosh and sinh over 0 to 4

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

LogPlot[ {Cosh[x], Sinh[x]}, {x, 0, 4}, Frame -> True,
      FrameTicks -> { LinTicks, LogTicks, None, None }]

如果接受该修补程序,则可以通过将LogTicks选项设置为PlotType来访问旧版LinearLogarithmic是默认设置。使用CustomTicks的好处是其他基础很容易

code for and plot of Exp[-x^2] from 0 to 3

并自动将其格式化为您想要的内容。

修改:我还想指出,CustomTicks可以自行加载,与LevelScheme的其余部分分开。而且,因为它是一个小包装,所以没有太多额外的开销。

答案 3 :(得分:4)

对我来说看起来像个错误。简单调用AbsoluteOptions[foo]会产生错误消息。简单的旧Options[foo]可以正常工作。

答案 4 :(得分:0)

发送包含此代码的电子邮件至support@Wolfram.com。他们将能够告诉您是否有一个已知的更好的解决方法。