التعامل مع كائنات بيانات متعددة في Protovis (تصور معلومات JavaScript)

StackOverflow https://stackoverflow.com/questions/3860381

سؤال

أشعر بالإحباط الشديد من محاولة تقليم وتسليم مجموعة من المصفوفات فقط التي تحتوي على أرقام من مجموعة من كائنات البيانات التي تشبه ما يلي لاتخاذ ثلاثة مخططات فطيرة منفصلة (Pv.wedge) لكل كائن ...

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}];

من الوثائق التي قيل لها أن هناك القليل من الحلقات التي يجب على المرء القيام بها في البروتوفيس ، ومع ذلك يبدو أنني لا أستطيع أن أحصل على MyData مع التلاعب/التحليل بشكل صحيح ، لذلك للأسف لجأت إلى حلقة صريحة.

لقد جربت العديد من أنواع الحلقات المختلفة ، لكن أفضل ما حصلت عليه هو طباعة من الأرقام تحت مساحة فارغة حيث أرغب في ظهور مخططات الفطيرة. سأكون ممتنًا إذا كان بإمكان شخص ما أن يعطيني تلميحًا لما يجب أن أفعله لتحقيق ذلك. في الوقت الحاضر أنا عالق في -

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;   

}

// 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();
هل كانت مفيدة؟

المحلول

الأعمال التالية. عملت مع البيانات كما كنت محدد. قد يكون من الأسهل العمل إذا كانت قيم الأوتاد في صفيف. ومع ذلك ، كان من المثير للاهتمام إغاظة البيانات من الكائن. DEF يخلق متغير محلي. لقد اخترت استخدام ذلك للقيم والإجمالية بدلاً من التطبيع لأنها جعلت من السهل إضافة Lables لاحقًا. ربما هناك طريقة أكثر أناقة للقيام بذلك ، ولكن يجب أن تكون قادرًا على رؤية نهج واحد دون حلق.

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(); 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top