我想知道是否给出了一些2D点,如何计算在对数y范围内在屏幕上绘制点的位置?
我试图仅取所有点的y值的对数,然后将它们“正常”绘制(绘图点[x,log(y)] =>高度:高度* log(y)/ log (最大值))。但是这种方法会导致y值低于1的问题。所以这让我想知道我的方法一般是否正确。我可以使用的一个调整是使用log(y / min)而不是log(y)。
欢迎任何有关改进或更好方法的建议!
答案 0 :(得分:2)
假设y
值为正数,请使用您自己的方法,使用较小的偏差,例如:height*log(y-min+1)/log(max-min+1)
,以防止出现非常大的负值。
答案 1 :(得分:2)
如果以对数方式绘制y/ymin
,则会将最小值缩放为1
,从而保证所有对数值均为非负值。
答案 2 :(得分:0)
查看可以为您提供一些线索的情节的R实施。如果您使用plot(x,y,log='y')
,那么y轴将以对数刻度绘制。
关于点数< 1,你将面临与-ve数相同的问题,对吧?因此,基本上您需要对数据进行标准化,以使所有点都在屏幕上的可见范围内。使用以下转换:
ny = number_of_pixels *(log(y) - min(log(Y)))/(max(log(Y)) - min(log(Y)))
答案 3 :(得分:0)
据我所知,你似乎试图绘制log(y),但保持y轴与y一样?这真的没有意义。
你的绘图方式很好:你在(x,log(y))处绘制一个点。
但你需要改变的是y轴的极限。如果它最初从ymin到ymax,现在需要从log(ymin)到log(ymax)。
如果你改变那个方向的y轴限制,那么这些点就可以了。