在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,i],Spacer[{0,0}]]},{i,min10,max10}],Flatten[
    Table[{k 10^i,0}],{0.005,0.`},{Thickness[0.001`]}},{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,4},FrameTicks -> { LinTicks,LogTicks,None,None }]
给 对于数据列表,显然您必须将
Log[Base,data]
ListPlot
一起使用,但这是可行的。我已经向马克·卡普里奥(Mark Caprio)提交了补丁,以便以下命令可以完全实现上述操作
LogPlot[ {Cosh[x],Sinh[x]},None }]
如果接受了补丁,则可以通过将选项“ 14”设置为“ 15”来访问“ 13”的旧形式,默认为“ 16”。使用
CustomTicks
的优点是其他碱基很容易 并会自动根据需要设置其格式。 编辑:我也想指出,
CustomTicks
本身是可加载的,与
LevelScheme
的其余部分分开。而且,由于它是一个小包装,因此没有太多额外的开销。     ,对我来说似乎是个虫子。简单调用“ 20”会产生错误消息。不过,普通的老式
Options[foo]
效果很好。     ,将包含此代码的电子邮件发送到[email protected]。他们将能够告诉您是否有已知的更好的解决方法。