Добавление и удаление перекрестных данных с помощью highcharts

#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: Я думаю, вы правы, мы не можем обрабатывать безопасные решения с помощью моего первого метода.