Javascript 气泡图c3js

Javascript 气泡图c3js,javascript,d3.js,c3.js,Javascript,D3.js,C3.js,根据c3js文档,气泡图没有选项。一种解决方法是设置散点图并指定点半径,但所有气泡的高度都相同 point = { r: function(d) { var num = d.value; return num }, 在r中添加轴的值可以解决问题,但现在的问题是如何设置非常高或非常低的值?例如,如果有1 000 000个值,则整个图表将着色。有什么简单的解决方法吗?首先,设置r以返回所选变量的平方根,例如

根据c3js文档,气泡图没有选项。一种解决方法是设置散点图并指定点半径,但所有气泡的高度都相同

point = {
          r: function(d) {
             var num = d.value;
             return num
          },

在r中添加轴的值可以解决问题,但现在的问题是如何设置非常高或非常低的值?例如,如果有1 000 000个值,则整个图表将着色。有什么简单的解决方法吗?

首先,设置r以返回所选变量的平方根,例如返回sqrt(num),这样表示一个数据点大小为另一个数据点100倍的圆的面积是100倍,而不是10000倍(面积=πr2等等)

如果数字仍然太大,请使用线性比例将其限制为可用大小:

rscale = d3.scale.linear().domain([1,1000]).range([0,10])
然后返回rscale(sqrt(num))

如果您的问题是在同一图表上表示大小值,以便小值不会消失,大值不会超过图表大小,请使用d3对数刻度查看:

rscale = d3.scale.log().base(10).domain([1,1000]).range([0,10])
当然,在对数尺度上,面积不再成线性比例,因此是否需要sqrt步骤仍有争议。如果您不记得调整域以解决此问题,请将其更改为域([11000000])

如果您事先不知道数字的大小,那么在数据集中循环选择要插入域值的最小值和最大值是值得的:domain([your_min,your_max])。我的例子都假设最大值为一百万

下面是我在JSFIDLE上给出的一个示例,从几百到十万以上的数字用对数刻度显示,所有数字都是可见的,但差异仍然很明显: