gpt4 book ai didi

python - 使用 Matplotlib 的半对数图中的纵横比

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:24 25 4
gpt4 key购买 nike

当我在 matplotlib 中绘制一个函数时,该图被一个矩形框起来。我希望这个矩形的长度和高度的比率由黄金分割法给出,即 dx/dy=1.618033...

如果 x 和 y 比例是线性的,我使用谷歌找到了这个解决方案

import numpy as np
import matplotlib.pyplot as pl
golden_mean = (np.sqrt(5)-1.0)/2.0
dy=pl.gca().get_ylim()[1]-pl.gca().get_ylim()[0]
dx=pl.gca().get_xlim()[1]-pl.gca().get_xlim()[0]
pl.gca().set_aspect((dx/dy)*golden_mean,adjustable='box')

如果是对数-对数图,我想出了这个解决方案

dy=np.abs(np.log10(pl.gca().get_ylim()[1])-np.log10(pl.gca().get_ylim()[0]))
dx=np.abs(np.log10(pl.gca().get_xlim()[1])-np.log10(pl.gca().get_xlim()[0]))
pl.gca().set_aspect((dx/dy)*golden_mean,adjustable='box')

但是,对于半对数图,当我调用 set_aspect 时,我得到

UserWarning: aspect is not supported for Axes with xscale=log, yscale=linear

有人能想出解决办法吗?

最佳答案

最简单的解决方案是记录您的数据,然后使用 lin-lin 的方法。

然后您可以标记坐标轴,使其看起来像一个普通的对数图。

ticks = np.arange(min_logx, max_logx, 1)
ticklabels = [r"$10^{}$".format(tick) for tick in ticks]

pl.yticks(ticks, ticklabels)

如果您的值高于 10e9,则需要三对大括号,两对用于 LaTeX 大括号,一对用于 .format()

ticklabels = [r"$10^{{{}}}$".format(tick) for tick in ticks]

编辑:如果你还想要 0.1ex ... 0.9ex 的刻度,你也想使用小刻度:它们需要位于 log10(1)、log10(2)、log10(3) ...、log10(10)、log10(20) ...

您可以创建和设置它们:

minor_ticks = []
for i in range(min_exponent, max_exponent):
for j in range(2,10):
minor_ticks.append(i+np.log10(j))


plt.gca().set_yticks(minor_labels, minor=True)

关于python - 使用 Matplotlib 的半对数图中的纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24866419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com