2015-07-13 74 views
4

我正在创建Google散点图。我有一个数据系列它看起来像:根据Google Scatter Chart的值更改点颜色

var data = new google.visualization.DataTable(); 
data.addColumn('number', 'ID'); 
data.addColumn('number', 'Value'); 

data.addRows([[1,100], [2,150], 
       [3,200], [4,250], 
       [5,300], [6,350], 
       [7,400], [8,450]]); 

我想散点图上的点的色彩变化,绿色和红色之间的基础上,每个点的“值”。

即点ID = 1的颜色应为绿色,但ID = 8应为红色!

这可能吗?

回答

9

添加一个额外的列到您的DataTable,与角色风格:

data.addColumn({'type': 'string', 'role': 'style'}); 

现在添加样式到每一行,以获得预期的效果:

data.addRows([[1,100, 'point {size: 14; fill-color: green'], 
       [2,150, 'point {size: 14; fill-color: green'], 
       .... 
       [8,450, 'point {size: 14; fill-color: red'] 
      ]); 

演示 - >http://jsfiddle.net/v92k8rty/


更新。有一个(可能有几百个)javascript库,非常容易提供具有可定制颜色和范围的渐变色板 - RainbowVis-JS。取而代之的是上述,通过在相同范围内的DataTable使用RainbowVis创建一个调色板,然后动态地添加颜色:

//create a gradient palette from green to red using RainbowVis 
var rainbow = new Rainbow(); 
rainbow.setNumberRange(1, data.getNumberOfRows()); 
rainbow.setSpectrum('green', 'red'); 

//alter the DataTable 
data.addColumn({'type': 'string', 'role': 'style'});  
for (var i=0;i<data.getNumberOfRows();i++) { 
    data.setCell(i, 2, 'point { fill-color:'+rainbow.colorAt(i+1)+'}'); 
}  

enter image description here 演示 - >http://jsfiddle.net/ehgfwh8z/

+0

谢谢您的回答,但,也许我的问题还不够清楚。我希望在整个值范围内创建一个颜色梯度。我之后的一个例子就是在这个页面上:[link](https://google-developers.appspot.com/chart/interactive/docs/gallery/geochart)注意颜色如何变化,即俄罗斯的流行度是比美国还要大“,所以比较暗。我的数据有数千个值,因此无法为每个值手动分配颜色。 – AnPocArBuile

+1

@AnPocArBuile,是的 - 你忘了提问题中的一些细节,至少可以说:)看更新。 – davidkonrad

+0

这是非常有用的,但不适用于材质散点图。 –