我正在用Python复制一些R代码。

我绊倒了R的pretty()

我需要的只是pretty(x),其中x是一些数字。

大致而言,该函数将“断点计算”为几个“舍入”值的序列。我不确定是否有Python等价物,而且我对Google的运气不佳。

编辑:更具体地说,这是pretty的帮助页面中的Description条目:



我查看了R的pretty.default(),以查看R对该函数的确切作用,但最终使用了.Internal()-通常会导致R变暗。我以为我会在潜水之前问一下。

有谁知道Python是否具有与R的pretty()等效的东西?

最佳答案

我以为刘易斯·福格登(Lewis Fogden)发布的伪代码看起来很熟悉,我们确实曾经用C++将该伪代码编码为绘图例程(以确定漂亮的轴标签)。我很快将其翻译为Python,不确定是否与R中的pretty()相似,但我希望它对任何人有帮助或有用。

import numpy as np

def nicenumber(x, round):
    exp = np.floor(np.log10(x))
    f   = x / 10**exp

    if round:
        if f < 1.5:
            nf = 1.
        elif f < 3.:
            nf = 2.
        elif f < 7.:
            nf = 5.
        else:
            nf = 10.
    else:
        if f <= 1.:
            nf = 1.
        elif f <= 2.:
            nf = 2.
        elif f <= 5.:
            nf = 5.
        else:
            nf = 10.

    return nf * 10.**exp

def pretty(low, high, n):
    range = nicenumber(high - low, False)
    d     = nicenumber(range / (n-1), True)
    miny  = np.floor(low  / d) * d
    maxy  = np.ceil (high / d) * d
    return np.arange(miny, maxy+0.5*d, d)

这将产生例如:
pretty(0.5, 2.56, 10)
pretty(0.5, 25.6, 10)
pretty(0.5, 256, 10 )
pretty(0.5, 2560, 10)

关于相当于R的 `pretty()`的Python函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43075617/

10-12 23:06