首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Javascript函数更新Protovis数据?

如何使用Javascript函数更新Protovis数据?
EN

Stack Overflow用户
提问于 2015-06-21 10:21:27
回答 1查看 82关注 0票数 1

我正在用"Protovis Mean & Deviation Example“画一个图表。在我的html文件中,我包含了这个protovis代码:

代码语言:javascript
复制
<script type="text/javascript+protovis">

/* Convert from tabular format to array of objects. */
var cols = nba.shift();
nba = nba.map(function(d) pv.dict(cols, function() d[this.index]));    
cols.shift();

/* The color scale ranges 3 standard deviations in each direction. */
var x = pv.dict(cols, function(f) pv.mean(nba, function(d) d[f])),
s = pv.dict(cols, function(f) pv.deviation(nba, function(d) d[f])),
fill = pv.dict(cols, function(f) pv.Scale.linear(0, 50,100).range('red', 'yellow', 'green'));

var w = 50, h = 20;

var vis = new pv.Panel()
.width(cols.length * w)
.height(nba.length * h)
.top(70)
.left(100.5)
.right(.5)
.bottom(.5);

vis.add(pv.Panel)
.data(cols)
.left(function() this.index * w)
.width(w)
.add(pv.Panel)
.data(nba)
.top(function() this.index * h)
.height(h)
.strokeStyle("white")
.lineWidth(1)
.fillStyle(function(d, f) fill[f](d[f]))
.title(function(d, f) d.Name + "'s " + f + ": " + d[f]);

vis.add(pv.Label)
.data(cols)
.left(function() this.index * w + w / 2)
.top(0)
.textAngle(-Math.PI / 2)
.textBaseline("middle");

vis.add(pv.Label)
.data(nba)
.left(0)
.top(function() this.index * h + h / 2)
.textAlign("right")
.textBaseline("middle")
.text(function(d) d.Name);

vis.render();

</script>

现在,为了给protovis提供有效的数据,我编写了一个Javascript函数。我的javascript函数的相关代码如下:

代码语言:javascript
复制
        for(var k=0; k< xlabelValues.length; k++){          //xAxis header values are in xlabelValues
            nba[0][k+1] = xlabelValues[k];              
        }

        for(var k=0; k< ylabelValues.length; k++){           //yAxis header values are in ylabelValues
            nba[k+1] = [];
            nba[k+1][0] = ylabelValues[k];
            for(var e=1; e<nba[0].length; e++){             
                zValue = hash3D[nba[0][e]+","+ylabelValues[k]];  //hash3D contains numeric values for (x,y) as KEY
                if(typeof zValue == "undefined"){
                    nba[k+1][e] = 0;
                }else{
                    nba[k+1][e] = zValue;
                }
            }
        }

此函数填充protovis的"nba“数据结构。数据结构是有效的,正如我所要求的。下面是这样一个数据结构的示例:

代码语言:javascript
复制
var nba = [
["","January","Feburary","March","April","May","June","July","August","Sep temebr","October","November","December"],
["Event 1",79,38.6,30.2,10.8,22,0.491,7.5,9.8,0.765,1.1,3.5,0.317],
["Event 2",81,37.7,28.4,9.7,19.9,0.489,7.3,9.4,0.78,1.6,4.7,0.344],
["Event 3",82,36.2,26.8,9.8,20.9,0.467,5.9,6.9,0.856,1.4,4.1,0.351],
["Event 4",81,37.7,25.9,9.6,20,0.479,6,6.7,0.89,0.8,2.1,0.359]
];

问题:由于protovis脚本在我的main.html文件的脚本标签中,因此,我应该如何传递protovis这个"nba“数据结构?我只希望protovis代码在我用javascript函数填充"nba“之后执行。

我希望我已经解决了我的问题,期待着建议和解决方案。非常感谢您的宝贵时间。

EN

回答 1

Stack Overflow用户

发布于 2016-04-25 23:01:30

我想我只是发现你的帖子太晚了。但我想花点时间回答,以防对其他人有用。

所有的protovis或d3函数基本上都是处理json或csv存储的数据。这里:var nba = json.

我猜该函数确实会自动填充:

代码语言:javascript
复制
var cols = data.shift();
    nba = data.map(function(d) pv.dict(cols, function() d[this.index]));
    cols.shift();

所以你唯一需要做的就是更改数据,并将这个脚本作为nba.js文件和这个脚本一起添加到你的html或php页面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30960681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档