首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Protovis中处理多个数据对象(javascript信息可视化)

在Protovis中处理多个数据对象(javascript信息可视化)
EN

Stack Overflow用户
提问于 2010-10-05 09:57:16
回答 1查看 624关注 0票数 0

我非常沮丧地试图修剪并向Protovis提交一组数组,其中只包含一组数据对象中的数字,如下所示,为每个对象绘制三个单独的饼图(pv.Wedge)……

代码语言:javascript
复制
myData = [{dept:"Accounting",sal:90000,equ:10000,trvl:267,extra:5000},
              {dept:"Sales",sal:20000,equ:10000,trvl:3049,extra:7000},
              {dept:"Consulting",sal:90000,equ:58000,trvl:983,extra:17000}];

从文档中我被告知,在Protovis中几乎不需要做循环,但是我似乎不能正确地操作/解析myData,所以我求助于显式循环。

我尝试过许多不同类型的循环,但我得到的最好的结果是在我想要显示饼状图的空白处打印出数字。如果有人能给我一个提示,告诉我应该做些什么来实现这一点,我将不胜感激。现在我被困在-

代码语言:javascript
复制
function getData(dept) {
   var getvals = new Array();
     for(idx in dept) {
       for(i in idx) {
           if(idx[i]=="^[0-9]+$") {
             getme.push(idx[i]); 
       }
   }      
 }
   return getvals;   

}

代码语言:javascript
复制
// myData = myData.map(function(d) {
//    var valonly = new Array();
//    for(key in d) {
//       if(isNaN(d[key])==false) {
//          valonly.push(d[key]);
//       }
//    }
//    return valonly;
// });


var vis = new pv.Panel()
  .width(w)
  .height(h)
  .data(getData(myData))
vis.add(pv.Wedge)
  //.data(pv.normalize(getData(myData)))
  .left(100) 
  .bottom(100)
  .outerRadius(r)
  .angle(function(d) d * 2 * Math.PI)
vis.add(pv.Label)
  .bottom(0)
  .left(100)
  .textAlign("center")
  //.text(data.dept + " - " + "total: " + hrsum);


vis.render();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-06 05:22:47

以下是有效的方法。我使用了您定义的数据。如果楔形的值本身在数组中,则使用起来会更容易。也就是说,从对象中梳理出数据是很有趣的。def创建一个局部变量。我选择将其用于值和合计,而不是标准化,因为这样可以更容易地在以后添加标签。可能有一种更优雅的方法来实现这一点,但您应该能够看到一种不需要循环的方法。

代码语言:javascript
复制
var myData = [{dept:"Accounting",sal:90000,equ:10000,trvl:267,extra:5000}, 
    {dept:"Sales",sal:20000,equ:10000,trvl:3049,extra:7000}, 
    {dept:"Consulting",sal:90000,equ:58000,trvl:983,extra:17000}]; 

var vis = new pv.Panel() 
    .width(200) 
    .height(200)
    .data(myData);

vis.add(pv.Wedge)
    .def("values", function(d) pv.entries(d).filter(function(e) !isNaN(e.value)))
    .def("total", function(d) pv.sum(this.values(), function(e) e.value))
    .data(function(d) this.values())
    .left(100)  
    .bottom(100) 
    .outerRadius(90)
    .angle(function(d) (d.value / this.total()) * 2 * Math.PI )
.anchor("center").add(pv.Label)
    .text(function(d) d.key);

vis.add(pv.Label)
    .bottom(0)
    .left(50) 
    .textAlign("center")
    .text(function(d) d.dept); 

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

https://stackoverflow.com/questions/3860381

复制
相关文章

相似问题

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