2

我想知道是否给出多个 2D 点,如何计算在屏幕上以对数 y 比例绘制点的位置?

我试图只取所有点的 y 值的对数,而不是“正常”地绘制它们(绘图点 [x, log(y)] => on height: height*log(y)/log(max)) . 但是这种方法会导致 y 值低于 1 时出现问题。所以这让我想知道我的方法总体上是否是正确的方法。我可能会使用的一个调整是使用 log(y/min) 而不是 log(y)。

欢迎任何关于改进或更好方法的建议!

4

4 回答 4

2

通过假设y值是积极的,使用你自己的方法,有一个小的偏差,比如:height*log(y-min+1)/log(max-min+1)防止非常大的负值。

于 2012-05-13T13:40:35.450 回答
2

如果您y/ymin以对数方式绘制,您会将最小值缩放为1,从而保证所有对数值都是非负数。

于 2012-05-13T13:47:33.110 回答
0

查看 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)))

于 2012-05-13T16:10:59.380 回答
0

据我了解,您似乎正在尝试绘制 log(y) 但保持 y 轴与 y 一样?这真的没有意义。

您绘制的方式很好:您在 (x, log(y)) 处绘制一个点。

但是你需要改变的是y轴的限制。如果它最初从 ymin 变为 ymax,现在需要从 log(ymin) 变为 log(ymax)。

如果您以这种方式更改 y 轴限制,那么这些点将非常适合。

于 2012-05-13T19:15:36.647 回答