Круговые диаграммы JQuery Flot показывают значение данных вместо процента
Я не могу понять, как получить flot.pie, чтобы изменить данные, указанные в метках, от процента "необработанных данных" до фактических данных. В моем примере я создал круговую диаграмму с номерами прочитанных/непрочитанных сообщений.
Число прочитанных сообщений: 50.
Количество непрочитанных сообщений: 150.
Созданный пирог показывает процент прочитанных сообщений как 25%. На этом месте я хочу показать 50 сообщений. См. Изображение ниже:
![enter image description here]()
Код, который я использовал для создания пирога:
var data = [
{ label: "Read", data: 50, color: '#614E43' },
{ label: "Unread", data: 150, color: '#F5912D' }
];
и
$(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
}
});
});
Возможно ли это?
С ответом @Ryley я пришел к грязному решению. Когда я выводил series.data, возвращались значения "1,150" и "1,50". Я придумал идею вычесть первые 2 символа возвращаемого значения и отобразить вычитаемое значение.
String(str).substring(2, str.lenght)
Это круговая диаграмма, которую я создал с помощью этого решения:
![enter image description here]()
Это не лучшее решение, но оно работает для меня. если кто-то знает лучшее решение....
Ответы
Ответ 1
Я нашел ответ на вопрос. Объект данных представляет собой многомерный массив. Чтобы получить фактические данные, используйте следующий код:
$(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
}
});
});
Обратите внимание на код "series.data [0] [1]" для извлечения данных.
Ответ 2
Это несколько зависит от того, что вы имеете в виду: "На этом месте я хочу показать фактические 50 сообщений".
Предположим, что вы хотите иметь всплывающее окно div, когда они наводили курсор на раздел "Чтение или непрочитание", а затем отображали там сообщения.
Первый шаг - сделать вашу круговую диаграмму интерактивной. Вам нужно добавить параметр grid
следующим образом:
legend: {
show: true;
},
grid: {
hoverable: true,
clickable: true
}
Затем вам нужно привязать события click/hover к функциям, которые извлекают ваши сообщения и отображают их:
$("#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
}
});
Что это!
Теперь, если вы имели в виду просто то, что вы хотите отображать все сообщения прямо в pie все время, вам просто нужно изменить свой форматтер для ссылки на глобальную переменную, содержащую ваши сообщения.
Ответ 3
Вы можете использовать:
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>';
},
Ответ 4
Попробуйте что-то вроде ProtoVis. На SO также есть несколько хороших ответов на ссылки на другие бесплатные библиотеки визуализации полезных данных. Если у вас есть несколько $диаграмм слияния, также неплохо.