У меня есть диаграмма amChart, данные которой взяты из двух таблиц под ней (код изменен из этого ответа SO). Каждая строка категории в каждой таблице начинается с другого префикса: первая таблица начинается с (Продажи), а вторая таблица начинается с (Рынок).
Вот мой код для лучшей иллюстрации: http://jsfiddle.net/uoxbm2d3/2/
Поскольку есть две таблицы, и это столбчатая / гистограмма, мне нужно, чтобы столбцы / столбцы были сложены в зависимости от того, из какой таблицы или какой у них префикс. Таким образом, (Продажи) будут складываться только с (Продажи), или, другими словами, данные из Таблицы 1 будут складываться только с Таблицей 1. То же самое касается (Рынок) / Таблицы 2, которые будут складываться только с его братьями и сестрами. Что-то вроде этого:
Зеленый / желтый / оранжевый цвет взят из Таблицы 1 (Продажи); синий / фиолетовый цвет взят из Таблицы 2 (Рынок).
Есть ли способ указать функции, какой график из какой таблицы? Или хотя бы сообщить функции, у каких данных какой префикс?
Вот фрагмент сценария
function generateGraphsFromData(chart, chartData) {
//get the chart graph value fields as lookup table with a seen property set to false by default
//this will be used to determine what graphs need to be removed when looking at the data
var graphValueFields = chart.graphs.reduce(function(valueFields, graph) {
valueFields[graph.valueField] = 0;
return valueFields;
}, {});
var removeValueFields = [];
//create an array of new graph value fields by filtering out the categoryField
//and the currently known valueFields.
var newGraphValueFields = [];
Object.keys(chartData[0]).filter(function(key) {
return key != chart.categoryField;
}).forEach(function(valueField) {
//if this is a new graph, add it to the list
if (graphValueFields[valueField] === undefined) {
newGraphValueFields.push(valueField);
} else {
//otherwise, set the seen flag to 1
graphValueFields[valueField] = 1;
}
});
//for each new value field left over, create a graph object and add to the chart.
newGraphValueFields.forEach(function(valueField) {
var graph = new AmCharts.AmGraph();
graph.title = valueField;
graph.valueField = valueField;
graph.balloonText = "<strong>[[title]]</strong><br /> Rp[[value]]";
graph.id = valueField; //use the valueField as the ID for ease of removal
graph.type = 'column';
graph.lineAlpha = 0;
graph.fillAlphas = 0.5;
graph.bullet = "none";
graph.stackable = true; // disable stacking
chart.addGraph(graph);
});
//loop through the graphValueFields lookup table and remove all graphs that were not seen when
//rescanning the data
Object.keys(graphValueFields).forEach(function(removeGraphValueField) {
if (graphValueFields[removeGraphValueField] === 0) {
chart.removeGraph(chart.getGraphById(removeGraphValueField));
}
})
}