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>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д