2011-04-15 13 views
23

yerine veri değerini gösterir Etiketlerde gösterilen verileri "ham veri" yüzdesinden gerçek verilere değiştirmek için flot.pie'yi nasıl elde edeceğimi anlayamıyorum. Örneğimde, okunmuş/okunmamış mesajların sayısına sahip bir pasta grafiği oluşturdum. okuma mesajlarınJquery Flot pasta grafikleri, yüzde

sayısı: okunmamış mesajların 50. sayısı: 150

oluşturulan pasta% 25 mesajları okumak yüzdesini gösterir. Bu noktada gerçek 50 mesajı göstermek istiyorum.

enter image description here

i pasta oluşturmak için kullanılan kod:

var data = [ 
    { label: "Read", data: 50, color: '#614E43' }, 
    { label: "Unread", data: 150, color: '#F5912D' } 
]; 

Ve: Bu mümkün mü

$(function() { 
     $.plot($("#placeholder"), data, 
      { 
      series: { 
       pie: { 
        show: true, 
        radius: 1, 
        label: { 
         show: true, 
         radius: 2/3, 
         formatter: function (label, series) { 
          return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + Math.round(series.percent) + '%</div>'; 

         }, 
         threshold: 0.1 
        } 
       } 
      }, 
      legend: { 
       show: false 
      } 
     }); 
    }); 

aşağıdaki resme bakın?

@Ryley cevabı ile kirli bir çözüm geldi. Series.data çıktığında "1,150" ve "1,50" değerleri döndü. Döndürülmüş değerin ilk 2 karakterini çıkarma ve çıkarılan değeri görüntüleme fikrini buldum.

String(str).substring(2, str.lenght) 

Bu

Bu çözüm ile oluşturulan pasta grafik:

enter image description here

Bu en iyi çözüm değildir, ancak benim için çalışıyor. Birisi daha iyi bir çözüm bilirse ...

+0

Ben biçimlendirici işi yapamıyorum, ayıklayıcı bile yanlış bilgilendirilmiş olan –

cevap

41

Sorunun cevabını buldum. Veri nesnesi çok boyutlu bir dizidir.Kod "series.data [0] [1]" verilerin çıkarılması için

$(function() { 
    $.plot($("#placeholder"), data, 
     { 
     series: { 
      pie: { 
       show: true, 
       radius: 1, 
       label: { 
        show: true, 
        radius: 2/3, 
        formatter: function (label, series) { 
         return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + series.data[0][1] + '</div>'; 

        }, 
        threshold: 0.1 
       } 
      } 
     }, 
     legend: { 
      show: false 
     } 
    }); 
}); 

Dikkat: elde etmek için acual veriler aşağıdaki kodu kullanın.

+0

Bu işe yaramaz. . . –

+0

O zamanlar benim için yaptı. Benim haritamda –

+0

sadece bir parça görüntüleniyor –

0

ProtoVis gibi bir şey deneyin. Diğer ücretsiz yararlı veri görselleştirme kitaplıklarına bağlantılar ile SO üzerinde birkaç iyi cevap vardır. Bazı fusion charts varsa da oldukça iyidir.

+0

... o çizgiye girmemektedir. Flot yakın zamanda yeni bir versiyon yayınladı. Zor/ilgisiz olup olmadığına göre, bu sizin fikriniz. – Ryley

+0

errrr, benim hatam, http://www.filamentgroup.com/lab/update_to_jquery_visualize_accessible_charts_with_html5_from_designing_with/ – FoneyOp

+0

Flot hala aktif olarak geliştirildi, çok aktif bir google grup/posta listesine sahip ve yakın zamanda GitHub'da bir ayna oluşturmayı düşünüyordum. Bir metin dosyası olduğu için belgelerinde puan kaybederler, ancak okuyabilecek herkes bunu anlayabilir. – Kai

2

Bu, "Bu noktada, gerçek 50 iletiyi göstermek istiyorum" ile ne demek istediğinize bağlıdır.
Okuma veya Okunmadı bölümünü farz ettikten sonra bir açılır pencereye sahip olmak istediğinizi varsayalım.

İlk adım pasta grafiğinizi interaktif hale getirmektir. Sen şöyle grid seçeneği eklemek gerekir: bu

$("#placeholder").bind('plothover',function(e,pos,obj){ 

}); 

$("#placeholder").bind('plotclick',function(e,pos,obj){ 
    if (obj.series.label == 'Read'){ 
     //show your read messages 
    } else { 
     //show your unread messages 
    }  
}); 

That:

legend: { 
    show: true; 
}, 
grid: { 
    hoverable: true, 
    clickable: true 
} 

Ardından, Mesajlarınızı almak işlevlere tıklama/vurgulu olayları bağlamak ve bunları görüntülemek zorunda! Ne demek sen pasta her zaman doğrudan tüm iletileri görüntülemek istedikleri basitçe ise


Şimdi, sadece iletileri içeren global bir değişkeni başvurmak için biçimlendirici değiştirmeniz gerekir.

+0

Cevabınız için teşekkür ederiz. Aşağıdaki kodu çağırdığımda 'alert (obj.series.data);' 'Oku' etiketli veriler için çıktı "1,50" dir. Bunun yerine neden "50" olmadığını söyler misin? –

+0

@Ruud, flot, verilerinizi arka planda manipüle ediyor ... ve tam olarak ne olduğu belli değil. Anladığınız gibi, kolayca erişilebilir bir dizi yerine gömülü ... – Ryley

1

Sen kullanabilirsiniz:

formatter: function (label, series) { 
    return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">'+Math.round(series.percent)+"%<br/>" + series.data[0][1] +'</div>'; 
},