Ajax подгрузка графа networkx из flask - Python

Узнай цену своей работы

Формулировка задачи:

Добрый вечер, товарищи! Недавно начал изучение networkx/flask, столкнулся с задачей написания динамической(с ajax) подгрузкой графа на сайт. В итоге потерпел крушение и разочарование при попытке создания. Networkx прекрасно грузится на сайт, обрабатывается великолепной библиотекой d3, все замечательно, пока не пробую загружать динамически появляющийся json файл с графом. Мало того! У динамически не получается даже загрузить банальный json пакет. Без штукатурки сейчас это выглядит вот так:
И подлый <div> вообще не хочет меняться!!! помогите принести мир и свет в это облако мрака, буду премного благодарен! P.S. читал: http://ru.code-maven.com/echo-with-flask-and-python http://flask.pocoo.org/docs/0.11/patterns/jquery/ JS знаю от слова нет.

Решение задачи: «Ajax подгрузка графа networkx из flask»

textual
Листинг программы
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
 
    <title>flask+d3 Hello World</title>
 
    <script src="http://d3js.org/d3.v2.js"></script>
    <style>
 
.axis {
    shape-rendering: crispEdges;
}
 
.axis line, .axis path {
    stroke-width: 1px;
    stroke: #000;
    fill: none;
}
 
circle.node {
  stroke: #fff;
  stroke-width: 1.5px;
}
 
line.link {
  stroke: #999;
  stroke-opacity: .6;
}
 
 
 
    </style>
 
</head>
<body>
 
        <form action="/">
             <input type="hidden" name="next" value=1>
            <input type="submit" value="Next step">
        </form>
 
    <div id="plot">
    </div>
    <script>
 
        // Set up the plot window.
        var margin = 30;
        var w = 700 - 2 * margin, h = 500 - 2 * margin;
        var svg = d3.select("#plot").append("svg")
                        .attr("width", w + 2 * margin)
                        .attr("height", h + 2 * margin)
                    .append("svg:g")
                        .attr("transform", "translate(" + margin + ", " + margin + ")");
 
        // Axes scaling functions.
        var xscale = d3.scale.linear().range([0, w]);
        var yscale = d3.scale.linear().range([h, 0]);
 
        // The axes objects themselves.
        var xaxis = d3.svg.axis().scale(xscale).ticks(8);
        var yaxis = d3.svg.axis().scale(yscale).ticks(8).orient("left");
 
        svg.append("svg:g").attr("class", "x axis")
                           .attr("transform", "translate(0, " + h + ")");
        svg.append("svg:g").attr("class", "y axis");
 
 
 
 
        // Load the data.
        var callback = function (data) {
 
 
            // Insert the data points.
            fill = d3.scale.category20();
 
 
          var force = d3.layout.force()
                      .charge(-120)
                      .linkDistance(30)
                      .nodes(data.nodes)
                      .links(data.links)
                      .size([w, h])
                      .start();
 
 
          var link = svg.selectAll("line.link")
              .data(data.links)
            .enter().append("svg:line")
              .attr("class", "link")
              .style("stroke-width", function(d) { return Math.sqrt(d.value); })
              .attr("x1", function(d) { return d.source.x; })
              .attr("y1", function(d) { return d.source.y; })
              .attr("x2", function(d) { return d.target.x; })
              .attr("y2", function(d) { return d.target.y; });
 
          var node = svg.selectAll("circle.node")
              .data(data.nodes)
            .enter().append("svg:circle")
              .attr("class", "node")
              .attr("cx", function(d) { return d.x; })
              .attr("cy", function(d) { return d.y; })
              .attr("r", 5)
              .style("fill", function(d) { return fill(d.group); })
              .call(force.drag);
 
          node.append("svg:title")
              .text(function(d) { return d.name; });
 
 
 
            svg.style("opacity", 1e-6)
                .transition()
                  .duration(1000)
                  .style("opacity", 1);
 
          force.on("tick", function() {
            link.attr("x1", function(d) { return d.source.x; })
                .attr("y1", function(d) { return d.source.y; })
                .attr("x2", function(d) { return d.target.x; })
                .attr("y2", function(d) { return d.target.y; });
 
            node.attr("cx", function(d) { return d.x; })
                .attr("cy", function(d) { return d.y; });
  });
 
        };
 
            d3.json("/gdata", callback);
 
 
    </script>
 
</body>
</html>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5