Я пытался создать стек с гистограммой с таймингами на моей оси x, используя C3js из содержимого CSV, которое я получаю из Интернета. Ниже приведена часть содержимого csv, которое я хочу проанализировать.Сложенная гистограмма не подходит должным образом
Time Series,Category,Duration
8/4/12 12:00 AM,Post Processor,387
8/7/12 12:00 AM,Post Processor,407
8/9/12 12:00 AM,Post Processor,398
8/20/12 12:00 AM,Post Processor,327
8/24/12 12:00 AM,Post Processor,391
8/4/12 12:00 AM,Response Processing,517
8/7/12 12:00 AM,Response Processing,543
8/9/12 12:00 AM,Response Processing,532
8/20/12 12:00 AM,Response Processing,436
8/24/12 12:00 AM,Response Processing,522
8/28/12 12:00 AM,Response Processing,457
9/12/12 12:00 AM,Response Processing,471
9/14/12 12:00 AM,Response Processing,453
9/16/12 12:00 AM,Response Processing,510
8/4/12 12:00 AM,External Calls,1035
8/7/12 12:00 AM,External Calls,1087
8/9/12 12:00 AM,External Calls,1064
8/20/12 12:00 AM,External Calls,874
8/24/12 12:00 AM,External Calls,1044
8/28/12 12:00 AM,External Calls,915
9/12/12 12:00 AM,External Calls,944
8/4/12 12:00 AM,Internal Processing,1294
8/7/12 12:00 AM,Internal Processing,1359
8/9/12 12:00 AM,Internal Processing,1331
8/20/12 12:00 AM,Internal Processing,1093
8/24/12 12:00 AM,Internal Processing,1306
Таким образом, столбец категории должен быть сгруппирован и представлен как значения. Поэтому мне пришлось выполнить ручную обработку содержимого. Я могу как-то генерировать график для этого, но стеки графов не являются правильными, и они перекрываются, я не уверен, почему. Я вставляю раздел генерации графа кода.
var chart = c3.generate({
bindto: '#chart',
data: {
x: 'x',
xFormat: '%m/%d/%y %I:%M %p',
columns: final_data,
type: 'bar',
groups: val
},
axis: {
x: {
type: 'timeseries',
tick: {
format: '%b %d',
fit: true
}
}
},
zoom: {
enabled: true
}
});
где переменная final_data
является массив массива с данными семантических, как показано ниже. Эта обработка была сделана для того, чтобы сделать вещи в правильной форме, чтобы сделать ее понятной для C3.
[
['x', ..... comma separated date in csv ....],
['Post Processor', ..... values with post processor .....],
['Response Processing', ..... values with request processing .....],
['External Calls', .... values with external calls .....],
['Internal Processing', ..... values with internal processing....]
]
Массив final_data
генерируется очень расплывчатым кодом. Вклеивая его ниже.
var master_object = {
count: 0,
values: [],
data: []
};
var isKeyPresent = function(key) {
if(master_object.values.indexOf(key) == -1)
master_object.values.push(key);
var trump = master_object.data;
var check, returnable;
trump.forEach(function loop(anElementInMaster, i) {
if(anElementInMaster[0] == key) {
check = 1;
returnable = i;
loop.stop = true;
}
});
if(check != 1)
return -1;
else
return returnable;
};
var kyaToBhiFunction = function(csvEntryArray) {
var index;
var key = csvEntryArray[0];
if((index = isKeyPresent(key)) >= 0) {
master_object.data[index].push(csvEntryArray[1]);
}
else {
master_object.data.push(csvEntryArray);
}
};
var resetMasterObject = function() {
master_object = {
count: 0,
values: [],
data: []
};
};
playerForTimeSeries_c3 = function(csvReport) {
var csvReportArray = d3.csv.parseRows(csvReport).slice(1);
var timeseries_array = [], val = [], values;
var final_data;
csvReportArray.forEach(function(entry) {
timeseries_array.push(entry.shift());
kyaToBhiFunction(entry);
});
timeseries_array.unshift('x');
final_data = master_object.data;
values = master_object.values;
// graph generation code continues here
}
и вот вид графа я получаю (штабеля бары, плохие оси Х) Пожалуйста, помогите мне с этим.
http://screencast.com/t/poax9WuIgv