【求助】运用对数刻度图像出错
mathematica吧
全部回复
仅看楼主
level 5
轸幻FIGHTER 楼主
如图 定义了一个函数H(数学上复杂,不必理会),对其关于两个变量l,p画柱状图。由于柱子高度差异比较大,想用对数刻度。但是用对数刻度后,发现柱子高度从1往下增长,感觉应该从0往上增长才对。
求助各位热心吧友 找一下问题出现在哪里,非常感激,谢谢~
代码单独粘一楼,请吧主勿删,感谢~
2024年05月04日 03点05分 1
level 5
轸幻FIGHTER 楼主
\[Eta][l_, p_, \[Gamma]_] :=
2^(Abs[l] + 2)*
p!*(Abs[l] + p)!*\[Gamma]^2*(Sum[((-2)^
m Gamma[m + Abs[l]/2 +
1])/((p - m)! (Abs[l] + m)! m! (1 + \[Gamma]^2)^(
m + Abs[l]/2 + 1)), {m, 0, p}])^2
\[CapitalEta][l_, L_, p_, \[Gamma]_] := \[Eta][l, p, \[Gamma]]*1/(
4 Pi^2)*Abs[-I/(l - L) (Exp[I*2 Pi*(l - L)] - 1)]^2
DiscretePlot3D[\[CapitalEta][l, 1.2, p, 1/Sqrt[2]], {l, -3, 3}, {p, 0,
5}, ExtentSize -> Full]
DiscretePlot3D[\[CapitalEta][l, 1.2, p, 1/Sqrt[2]], {l, -3, 3}, {p, 0,
5}, ExtentSize -> Full, ScalingFunctions -> {None, None, "Log"}]
2024年05月04日 03点05分 2
吧务
level 15

……Log函数的性质就是这个样子的(对这点没概念的人真是意外地多啊)。总之你好好回忆下自变量小于1时Log函数图像是啥样的。
2024年05月04日 03点05分 3
吧主,请问我不是想对柱子的高度取对数值,而只是对数刻度(就是非线性的那种意思),那该怎么办呢? 感谢吧主。
2024年05月04日 06点05分
level 5
轸幻FIGHTER 楼主
就是还是想用对数刻度,但不是对柱子高度取对数值。结果类似于这个图片这种的
2024年05月04日 06点05分 4
吧务
level 15
“请问我不是想对柱子的高度取对数值,而只是对数刻度(就是非线性的那种意思),那该怎么办呢? ”
ScalingFunctions可以自定义的,语法是一对互为反函数的函数关系……文档里的例子是简略了一点,写下好了:
k = 1/1000;
func = Log[#/k + 1] &;
lst = {func, InverseFunction@func}
DiscretePlot3D[\[CapitalEta][l, 12/10, p, 1/Sqrt[2]] // Evaluate, {l, -3, 3}, {p, 0,
5}, ExtentSize -> Full, ScalingFunctions -> lst]
2024年05月04日 07点05分 5
感谢吧主[呵呵]
2024年05月04日 07点05分
level 9
DiscretePlot3D[\[CapitalEta][l, 1.2, p, 1/Sqrt[2]], {l, -3, 3}, {p, 0,
5}, ExtentSize -> Full, ScalingFunctions -> {None, None, "Log"},
Filling -> Bottom]
指定填充方式为 Bottom 就好了
2024年05月05日 12点05分 6
非常感谢!请问您一般是怎么学到这些细节的,看帮助文档吗?[开心]
2024年05月06日 07点05分
对哦,还可以用这招。补充一下,这个办法其实相当于在对数坐标上复合了一个减法。(当然了,比改ScalingFunctions简洁多了。)
2024年06月01日 02点06分
1