简而言之,我试图制作一个条形图(使用GWT的HTML5画布包装器),以显示给定值的合理值,无论图表底部和顶部的实际值是多少。我假设最好的方法是对数方法,但是我完全接受其他任何解决方案。

假设:


我们的“条”垂直,高200像素,宽35像素。
我们正在显示一个“站点”与其父“区域”。单位是功率单位(例如kW,MW,GW)。
“区域”的范围为1 kW至55.19 GW。平均值是27.6 MW。
该区域内大约95%的站点比55 GW的站点更接近1 W,但顶部5%的站点明显偏离了平均值。
first site的值为12.67 MWsecond site的值为192.21 kW


显然,第二个站点甚至不会在线性图上注册,而第一个站点会注册得非常低。

如何使该栏更有用?例如,我希望排名靠前的5%的网站歪曲该地区的平均值,只代表总条形的一小部分(5%),而其他95%的网站应代表95%。



条形区域下部的线是区域平均线,而整个条形表示最小(底部)到最大(顶部)。

使用log10的当前Java代码:

// BAR_GRAPH_WIDTH = 36, BAR_GRAPH_HEIGHT = 200
// regionNsp (MW): [min=0.0, max=55192.8, avg=27596.5]
// siteNsp (MW) = 187.18
DrawingArea canvas = new DrawingArea(BAR_GRAPH_WIDTH, BAR_GRAPH_HEIGHT);
Rectangle bgRect = new Rectangle(1, 0, BAR_GRAPH_WIDTH - 1, BAR_GRAPH_HEIGHT); // backgound bar
bgRect.setFillColor("white");
canvas.add(bgRect);
int graphSize = (int)(BAR_GRAPH_HEIGHT / Math.log10(regionNsp.getMax()));
int siteHeight = (int)Math.log10(siteNsp - regionNsp.getMin()) * graphSize;
Rectangle valueRect = new Rectangle(1, BAR_GRAPH_HEIGHT-siteHeight, 35, siteHeight);
valueRect.setFillColor("lightgreen");
canvas.add(valueRect);

最佳答案

我承认我对GWT不太了解,所以我根据如何在纸笔图上显示您的值进行回答。答案是您已经回答了自己的问题-使用日志。取(以10为底)的原木后,范围从1000到55200000000,平均大约为2760万,变成大约3到11,平均大约为7.4。

需要注意的是,您从“合理性”中获得的东西会使您的观点松散。以分贝标度为基础,这是(以10为底)对数。 80分贝的声音和85分贝的声音之间的区别似乎并没有太大的变化,只是第二声的能量要大三倍。

08-29 01:15