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