我在
Python中复制一些R代码.
我惹恼了R的漂亮().
我需要的只是漂亮(x),其中x是一些数字.
粗略地说,函数“计算漂亮的断点”作为几个“圆”值的序列.我不确定是否有Python等价物,而且我对Google没有太多运气.
编辑:更具体地说,这是漂亮的帮助页面中的描述条目:
Description: Compute a sequence of about n+1 equally spaced ‘round’ values which cover the range of the values in x. The values are chosen so that they are 1,2 or 5 times a power of 10.
我查看了R的pretty.default(),看看R究竟在做什么,但最终使用的是.Internal() – 这通常会导致黑暗R魔法.我以为在潜入之前我会问一下.
有谁知道Python是否有与R’s 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,256,10 ) pretty(0.5,2560,10)
[ 0.5 1. 1.5 2. 2.5 3. ]
[ 0. 5. 10. 15. 20. 25. 30.]
[ 0. 50. 100. 150. 200. 250. 300.]
[ 0. 500. 1000. 1500. 2000. 2500. 3000.]