Подтвердить что ты не робот

Масштабируемый сетевой график в AngularJS

Я хотел бы визуализировать сетевой граф в приложении AngularJS. Узлы и ребра сохраняются как объект JSON, а узлы будут добавлены и изменены позже (скажем, каждые 30 секунд). Я хочу использовать привязку данных Angular для автоматического обновления графика при изменении объекта JSON. График будет иметь 10-1000 узлов. Узлы будут прямоугольными текстовыми узлами, содержащими около предложения каждый. Я хотел бы, чтобы график был масштабируемым и панорамным.

Я знаю о следующих вариантах:

Существуют ли другие соответствующие библиотеки? Какая лучшая библиотека используется для этого проекта и как я могу реализовать такой масштабируемый динамический сетевой график, учитывая библиотеку?

4b9b3361

Ответ 1

Я экспериментировал в VisJs в angular, и мне это очень нравится. Их сеть одновременно настраивается и масштабируется, и вы можете выбирать узлы. Документацию легко отслеживать, и на их сайте представлено множество примеров. Поскольку виртуальные сети могут динамически обновляться, мне было легко интегрировать их в мое приложение angular. Например, я создал эту директиву:

app.directive('visNetwork', function() {
    return {
        restrict: 'E',
        require: '^ngModel',
        scope: {
            ngModel: '=',
            onSelect: '&',
            options: '='
        },
        link: function($scope, $element, $attrs, ngModel) {
            var network = new vis.Network($element[0], $scope.ngModel, $scope.options || {});

            var onSelect = $scope.onSelect() || function(prop) {};
            network.on('select', function(properties) {
                onSelect(properties);
            });

        }

    }
});

Что я использую в своем html, например:

<vis-network ng-model="network_data" options="network_options" on-select="onNodeSelect" id="previewNetwork">
</vis-network>

Тогда в моем контроллере у меня есть следующее:

    $scope.nodes = new vis.DataSet();
    $scope.edges = new vis.DataSet();
    $scope.network_data = {
        nodes: $scope.nodes,
        edges: $scope.edges
    };
    $scope.network_options = {
        hierarchicalLayout: {
            direction: "UD"
        }

    };

   $scope.onNodeSelect = function(properties) {
        var selected = $scope.task_nodes.get(properties.nodes[0]);
        console.log(selected);
    };

    $scope.nodes.add([
        {id: 1, label: 'Node 1'},
        {id: 2, label: 'Node 2'},
        {id: 3, label: 'Node 3'},
        {id: 4, label: 'Node 4'},
        {id: 5, label: 'Node 5'}]);

    $scope.edges.add([
        {id: 1, from: 1, to: 2},
        {id: 2, from: 3, to: 2}
    ]);

Ответ 2

Это действительно должно быть на Рекомендации по использованию программного обеспечения StackExchange, но я не могу проголосовать за закрытие из-за щедрости.

GoJS поддерживает все ваши требования и работает рядом с Angular (простая демонстрация здесь). (JSON для хранения модели, привязки данных, масштабирования и панорамирования)

Ответ 3

Существует хорошая демонстрация/пример сетевой карты с исходным кодом в D3: http://christophergandrud.github.io/d3Network/ Функциональность там есть, и D3, похоже, хорошо играет с JSON. Из моих исследований это отличный выбор для библиотеки визуализации. Многие другие библиотеки (графит и т.д.) Также поддерживают одну и ту же функциональность, но сложнее реализовать и не очень активны.

NVD3 - это вариация D3, разработанная для AngularJS, которая также может работать. Внедрение графиков и диаграмм из NVD3 в AngularJS проще, чем D3.