我正在尝试在ListLogLogPlot上自定义格式标签。通过搜索Mathgroup存档,看起来乱用标记标签的常用方法是使用AbsoluteOptions
提取它们,使用自定义格式运行替换规则,然后使用{{1将它们显式地提供给绘图函数}} 选项。但是,以下内容对ListLogLogPlot不起作用:
Ticks->{...}
关于如何处理这个的任何想法?..
编辑:这里有很多好的答案!接受Wizard先生,因为它被证明是解决眼前问题最简洁的方法,但我发现自己使用了将来建议的其他方法。
答案 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} ))
感谢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 }]
给出
对于数据列表,显然您必须将Log[Base, data]
与ListPlot
一起使用,但它是可行的。我已经向Mark Caprio提交了一个补丁,以便以下内容与上面完全相同
LogPlot[ {Cosh[x], Sinh[x]}, {x, 0, 4}, Frame -> True,
FrameTicks -> { LinTicks, LogTicks, None, None }]
如果接受该修补程序,则可以通过将LogTicks
选项设置为PlotType
来访问旧版Linear
,Logarithmic
是默认设置。使用CustomTicks
的好处是其他基础很容易
并自动将其格式化为您想要的内容。
修改:我还想指出,CustomTicks
可以自行加载,与LevelScheme
的其余部分分开。而且,因为它是一个小包装,所以没有太多额外的开销。
答案 3 :(得分:4)
对我来说看起来像个错误。简单调用AbsoluteOptions[foo]
会产生错误消息。简单的旧Options[foo]
可以正常工作。
答案 4 :(得分:0)
发送包含此代码的电子邮件至support@Wolfram.com。他们将能够告诉您是否有一个已知的更好的解决方法。