在ListLogLogPlot的刻度标签中强制使用科学计数法

|| 我正在尝试在ListLogLogPlot上自定义格式的刻度标签。通过搜索Mathgroup归档文件,看起来像打勾标签的通常方法是使用ѭ0提取它们,运行具有自定义格式的替换规则,然后使用
Ticks->{...}
选项将它们显式输入到绘图功能。但是,以下不适用于ListLogLogPlot:
foo = ListLogLogPlot[Range[20]^3, Frame -> True];
ticks=(FrameTicks /. AbsoluteOptions[foo, FrameTicks])
有关如何处理此问题的任何想法? 编辑:这里有很多好的答案!接受巫师先生的做法,因为它被证明是解决眼前问题的最简洁方法,但是我发现自己将来会使用其他建议的方法。     
已邀请:
可以绕过to3ѭ/
AbsoluteOptions
,使用替代品直接弄乱标签:
ListLogLogPlot[Range[20]^3, Frame -> True] /.
   (FrameTicks -> x_) :>
      (FrameTicks -> (x /. {a_?NumericQ, b_Integer, s___} :>
         {a, Superscript[10, Log10@b], s} ))
多亏了Alexey Popkov,这才得以改善,并且不那么脆弱。     
像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]}}]
    
为了补充布雷特的答案,请查看LevelScheme中的
CustomTicks
软件包。它提供了两个用于生成刻度线\'LinTicks
and
LogTicks`的功能,并且每个功能都有许多格式化选项。当前,它要求您自己执行对数,即
Plot[ {Log[10,Cosh[x]], Log[10, Sinh[x]]}, {x, 0, 4}, Frame -> True,
      FrameTicks -> { LinTicks, LogTicks, None, None }]
给 对于数据列表,显然您必须将
Log[Base, data]
ListPlot
一起使用,但这是可行的。我已经向马克·卡普里奥(Mark Caprio)提交了补丁,以便以下命令可以完全实现上述操作
LogPlot[ {Cosh[x], Sinh[x]}, {x, 0, 4}, Frame -> True,
      FrameTicks -> { LinTicks, LogTicks, None, None }]
如果接受了补丁,则可以通过将选项“ 14”设置为“ 15”来访问“ 13”的旧形式,默认为“ 16”。使用
CustomTicks
的优点是其他碱基很容易 并会自动根据需要设置其格式。 编辑:我也想指出,
CustomTicks
本身是可加载的,与
LevelScheme
的其余部分分开。而且,由于它是一个小包装,因此没有太多额外的开销。     
对我来说似乎是个虫子。简单调用“ 20”会产生错误消息。不过,普通的老式
Options[foo]
效果很好。     
将包含此代码的电子邮件发送到support@Wolfram.com。他们将能够告诉您是否有已知的更好的解决方法。     

要回复问题请先登录注册