#javascript #php #json #highcharts
#javascript #php #json #highcharts
Вопрос:
ОБНОВЛЕНИЕ -> Вот jsfiffle http://jsfiddle.net/Lx3Xq /
мой мозг здесь как бы застывает. Я пытаюсь добавлять и удалять различные данные из моего объекта highcharts. Я знаю технику, но прямо здесь я не знаю, как пересекать мои данные. Итак, вот мой php-файл, который содержит мои данные (с json)
$categories = array(
'Health' => [380,442,472],
'Mana' => [250,215,220],
'Attack Damage' => [50,55,47],
'Armor' => [15,18.5,22],
'Attack Speed' => [0.67,0.63,0.64],
'Magic Resist' => [30,30,30],
'Movement Speed' => [330,330,335]
);
$champions = array('CharacterName1','CharacterName2','CharacterName3');
$graph_data = array('categories'=>$categories, 'champions'=>$champions);
echo json_encode($graph_data);
exit;
Затем я создаю свою диаграмму следующим образом
$.each(data.categories, function(key, value){
var series = {};
series.name = key;
series.data = value;
options.series.push(series);
})
$.each(data.champions, function(key, value){
var categories = [];
options.xAxis.categories.push(value);
})
var chart = new Highcharts.Chart(options);
Никаких проблем, у меня есть ось x с именем моих персонажей и значениями рядов с именами «Здоровье», «Мана» и т.д… в столбчатой диаграмме.
Дело в том, что я хочу добавить или удалить некоторые данные моих символов с помощью флажков. Я создаю флажки
var mesRadio = document.getElementById('monForm');
var mesCheksBoxes = '';
for (var i = 0; i < data.champions.length; i ) {
mesCheksBoxes = '<label>' data.champions[i] '<input type="checkbox" class="choice" name="choice-' i '" value="' data.champions[i] '"></label>';
};
mesRadio.innerHTML = mesCheksBoxes;
Это то, что я замораживаю. Я хотел бы отправить данные и название моей серии (категории массива), связанные с именами моих персонажей (чемпионы массива). Но я не знаю, какой метод будет правильным.
Если у кого-то есть какая-то идея и какая-то зацепка, которой я могу следовать, это будет здорово.
Спасибо
Комментарии:
1. Вероятно, ваша строка series.data = value; прикрепите строку, а не массив. Другими словами, вы получаете что-то вроде series.data = «[380,442,472]».
2. однако моя диаграмма содержит хорошие данные. Мой персонаж 1 получает 380 единиц маны, мой персонаж 2 442 единицы маны и т.д…
3. Хорошо, так что это имеет смысл, спасибо
Ответ №1:
Если вы хотите добавить и удалить их, используйте:
chart.addSeries(series_object)
chart.series[index_of_series_to_remove].remove()
— обратите внимание, что если вы удалите ряд с индексом = 0, то его место займет ряд с индексом = 1. Вместо использования индексов вы можете добавлять к каждой серииid
, а затем использоватьchart.get(id)
, чтобы удалить серию.
Или, может быть, вы просто хотите скрыть ряды из диаграммы? Затем простое использование:
Второе решение намного проще.
Примечание: Чтобы скрыть / показать / добавить / удалить ряд, вам необходимо добавить событие в каждый из флажков и в диаграмму обновления обратного вызова.
Комментарии:
1. Да, ваша идея с идентификатором хороша, я пытаюсь это сделать. Вся моя проблема заключалась не в том, как скрыть / удалить / добавить серию, а в том, как скрестить данные моих 2 массивов, чтобы скрыть / показать или удалить / добавить данные моего массива 1 (категории) на основе индекса моего массива 2 (чемпионы). Я копаю, спасибо за совет 🙂
2. Может быть, вместо
data.champions[i]
значения использовать простой индекс? Затем, используя этот индекс, вы можете скрыть / показать конкретный индекс. Честно говоря, если бы вы могли создать демонстрационную версию jsFiddle с некоторыми статическими данными (в качестве примера), это было бы большой помощью 🙂3. Да, вот оно : jsfiddle.net/Lx3Xq Я сохраняю в комментариях свой вызов json. Обычно я устанавливаю свои флажки в своем js.
4. Спасибо, эта демонстрация действительно полезна. К сожалению, вы не можете скрыть полную категорию в Highcharts (например, символ 2) — только серию, как в legend. Однако вы можете реализовать что-то вроде этого: jsfiddle.net/Lx3Xq/1 — это не идеальное решение, но хорошая отправная точка. Другим решением было бы использовать
setExtremes()
, но, к сожалению, сsetExtremes()
помощью solution вы можете скрыть только большинство символов слева / справа.5. Спасибо за ваше решение. К сожалению, я пробую другой способ упорядочить свои данные, сделав это: jsfiddle.net/Leminence/jZmYJ Я использую API highchats для добавления / удаления данных. Пока это кажется отличным, я изучаю это решение. Тем не менее, ваш скрипт может быть полезен для других обновлений, которые я хочу сделать в этом проекте. Еще раз спасибо. PS: Я думаю, вы правы, мы не можем обрабатывать безопасные решения с помощью моего первого метода.