如何以对数方式可视化一系列值
How to visualise a range of values logarithmically?
我正在为城市可视化气泡,如果城市具有更大的价值,则更大。如:
London: 14500
New York: 100
Tokyo: 1100
取值范围为~100-15000
我在创建一个返回合理值的函数时遇到了麻烦,这样100个值气泡就不会太小。我能想到的唯一方法就是设置一个最小大小,例如:
if (size < 5) { size = 5 }
但是,这会导致值为~100的城市与值为~1000的城市看起来非常相似。我希望大约0-15000的值返回为0.5和1之间的值(或类似的东西)。如何做到这一点呢?这是我到目前为止所做的,但就像我说的,它导致值100和值1000都低于最小值:
var minBulletSize = 7.5;
var maxBulletSize = 20;
var maxSquare = maxBulletSize * maxBulletSize * 2 * Math.PI;
var minSquare = minBulletSize * minBulletSize * 2 * Math.PI;
// create circle for each location
for (var i = 0; i < mapData.length; i++) {
var dataItem = mapData[i];
var value = dataItem.value;
// calculate size of a bubble
var square = (value/1000 - minBulletSize) / (maxBulletSize - minBulletSize) * (maxSquare - minSquare) + minSquare;
if (square < minSquare) {
square = minSquare;
}
if (square > maxSquare) {
square = maxSquare;
}
var size = Math.sqrt(square / (Math.PI * 2));
var id = dataItem.code;
}
我已经研究了如何使对数函数在0.5和1的约束下看起来"对数":
Math.log10(x / 0.8 + 1) / 3 + 0.5
,其中x在0到24.5之间。
这纯粹是一个对我来说看起来不错的函数,你可以在早期得到非常动态的数字,尽管在较大的数字中可以看到明显的增长。
请随意摆弄数字,这是非常主观的。
接下来你需要在0到24.5的范围内适应你的100~15000范围。我会简单地做一个x = (x - 100) / 608.16
,让你的范围在0到24.5之间。
var minBulletSize = 7.5;
var maxBulletSize = 20;
var maxSquare = maxBulletSize * maxBulletSize * 2 * Math.PI;
var minSquare = minBulletSize * minBulletSize * 2 * Math.PI;
// create circle for each location
for (var i = 0; i < mapData.length; i++) {
var dataItem = mapData[i];
var value = dataItem.value;
// assuming value is in between 100 and 15000
value = (value - 100) / 608.16;
value = Math.log10(value / 0.8 + 1) / 3.0 + 0.5;
// value will be in between 0.5 and 1 on a logarithmic scale.
// Do what you want with it :)
}
修改函数中的值,直到找到最适合自己的曲线。
相关文章:
- 如何在谷歌可视化中组合数字和模式格式化程序
- 加载泰坦尼克号可视化数据时出现问题
- 如何使用图表包装函数有条件地格式化谷歌可视化表单元格
- AngularJS&Google可视化-使用状态更改处理程序(Google API)在HTML页面上查看$sco
- Javascript图形可视化工具包,具有高性能(500-1000个节点)
- Google可视化addListener调用函数引用错误
- 如何在web上动态可视化数据集
- 可视化到选择框中
- 从特定系列的谷歌可视化折线图中删除悬停工具提示
- 谷歌图表可视化仪表板数据源问题
- 在可视化中将CSS从悬停更改为单击
- 使用 d3 可视化快速射击的“点击”
- 为 D3 可视化创建平均 Y 线
- 谷歌可视化数据表间歇性问题
- Google 图表 - 设置选择不会滚动到表格可视化中的选定行
- 在纯HTML5中是否可以进行高级可视化编程
- 无法可视化百分比数字(获取 NaN)
- 如何修复谷歌可视化-材料线中的重叠问题
- 谷歌地图,基于国家代码可视化国家
- 如何以对数方式可视化一系列值