gpt4 book ai didi

python - 使用 matplotlib/python 的平方根比例

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

我想用 Python 绘制平方根比例的图:

square root scale graph

但是,我不知道怎么做。 Matplotlib 允许制作对数刻度,但在这种情况下,我需要类似幂函数刻度的东西。

最佳答案

您可以自己制作ScaleBase类来做到这一点。我修改了 here 中的示例(这是一个平方尺度,而不是平方根尺度)为了你的目的。另请参阅文档 here .

请注意,要正确执行此操作,您可能还应该创建自己的自定义刻度定位器;不过我在这里没有这样做;我只是使用 ax.set_yticks() 手动设置主要和次要刻度。

import matplotlib.scale as mscale
import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
import matplotlib.ticker as ticker
import numpy as np

class SquareRootScale(mscale.ScaleBase):
"""
ScaleBase class for generating square root scale.
"""

name = 'squareroot'

def __init__(self, axis, **kwargs):
# note in older versions of matplotlib (<3.1), this worked fine.
# mscale.ScaleBase.__init__(self)

# In newer versions (>=3.1), you also need to pass in `axis` as an arg
mscale.ScaleBase.__init__(self, axis)

def set_default_locators_and_formatters(self, axis):
axis.set_major_locator(ticker.AutoLocator())
axis.set_major_formatter(ticker.ScalarFormatter())
axis.set_minor_locator(ticker.NullLocator())
axis.set_minor_formatter(ticker.NullFormatter())

def limit_range_for_scale(self, vmin, vmax, minpos):
return max(0., vmin), vmax

class SquareRootTransform(mtransforms.Transform):
input_dims = 1
output_dims = 1
is_separable = True

def transform_non_affine(self, a):
return np.array(a)**0.5

def inverted(self):
return SquareRootScale.InvertedSquareRootTransform()

class InvertedSquareRootTransform(mtransforms.Transform):
input_dims = 1
output_dims = 1
is_separable = True

def transform(self, a):
return np.array(a)**2

def inverted(self):
return SquareRootScale.SquareRootTransform()

def get_transform(self):
return self.SquareRootTransform()

mscale.register_scale(SquareRootScale)

fig, ax = plt.subplots(1)

ax.plot(np.arange(0, 9)**2, label='$y=x^2$')
ax.legend()

ax.set_yscale('squareroot')
ax.set_yticks(np.arange(0,9,2)**2)
ax.set_yticks(np.arange(0,8.5,0.5)**2, minor=True)

plt.show()

enter image description here

关于python - 使用 matplotlib/python 的平方根比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42277989/

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