简而言之,我正在尝试制作一个条形图(使用GWT的HTML5画布包装器),无论图表底部和顶部的值是多少,它都会显示给定值的合理值。我假设最好的方法是对数,但我完全接受任何其他解决方案。
假设:
我们的“条形”垂直,高200像素,宽35像素。
我们正在显示一个“网站”,而不是它的父级“地区”。单位是功率单位(例如kW,MW,GW)。
“地区”的范围为1千瓦至55.19吉瓦。平均值为27.6兆瓦。
该区域约95%的站点比55 GW更接近1 W,但前5%的站点显着偏差。
first site
的值为12.67 MW
。 second 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);
答案 0 :(得分:3)
考虑对数刻度,中断极高值,远远超过群体中的任何其他值。有关条形和轴中断的示例,请参阅:http://tomhopper.files.wordpress.com/2010/08/bar-chart-natural-axis-split1.png
答案 1 :(得分:2)
我承认我对GWT知之甚少,所以我在回答的基础上如何在纸笔图上显示你的价值观。答案是你已经回答了自己的问题 - 使用日志。服用(普通基数10)日志后,范围从1000到55200000000,平均大约27600000,变为大约3到11,平均大约为7.4。
需要注意的是,你从“合理性”中获得的东西在视角上是松散的。取分贝标度,即(基础10)基于日志。 80分贝的声音和85分贝的声音之间的差异似乎并不是一个很大的变化,除了第二个三次更有活力。