You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
from __future__ import print_function
|
|
from __future__ import unicode_literals
|
|
|
|
from builtins import str, bytes, dict, int
|
|
from builtins import range
|
|
|
|
import os
|
|
import sys
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", ".."))
|
|
|
|
from pattern.graph import Graph, WEIGHT, CENTRALITY, DEGREE, DEFAULT
|
|
from random import choice, random
|
|
|
|
# This example demonstrates how a graph visualization can be exported to HTML,
|
|
# using the HTML5 <canvas> tag and Javascript.
|
|
# All properties (e.g., stroke color) of nodes and edges are ported.
|
|
|
|
g = Graph()
|
|
# Random nodes.
|
|
for i in range(50):
|
|
g.add_node(id=str(i + 1),
|
|
radius = 5,
|
|
stroke = (0, 0, 0, 1),
|
|
text = (0, 0, 0, 1))
|
|
# Random edges.
|
|
for i in range(75):
|
|
node1 = choice(g.nodes)
|
|
node2 = choice(g.nodes)
|
|
g.add_edge(node1, node2,
|
|
length = 1.0,
|
|
weight = random(),
|
|
stroke = (0, 0, 0, 1))
|
|
|
|
for node in g.sorted()[:20]:
|
|
# More blue = more important.
|
|
node.fill = (0.6, 0.8, 1.0, 0.8 * node.weight)
|
|
|
|
g.prune(0)
|
|
|
|
# This node's label is different from its id.
|
|
# We'll make it a hyperlink, see the href attribute at the bottom.
|
|
g["1"].text.string = "home"
|
|
|
|
# The export() command generates a folder with an index.html,
|
|
# that displays the graph using an interactive, force-based spring layout.
|
|
# You can drag the nodes around - open index.html in a browser and try it out!
|
|
# The layout can be tweaked in many ways:
|
|
|
|
g.export(os.path.join(os.path.dirname(__file__), "test"),
|
|
width = 700, # <canvas> width.
|
|
height = 500, # <canvas> height.
|
|
frames = 500, # Number of frames of animation.
|
|
directed = True, # Visualize eigenvector centrality as an edge arrow?
|
|
weighted = 0.5, # Visualize betweenness centrality as a node shadow?
|
|
pack = True, # Keep clusters close together + visualize node weight as node radius?
|
|
distance = 10, # Average edge length.
|
|
k = 4.0, # Force constant.
|
|
force = 0.01, # Force dampener.
|
|
repulsion = 50, # Force radius.
|
|
stylesheet = DEFAULT, # INLINE, DEFAULT, None or the path to your own stylesheet.
|
|
javascript = None,
|
|
href = {"1": "http://www.clips.ua.ac.be/pages/pattern-graph"}, # Node.id => URL
|
|
css = {"1": "node-link-docs"} # Node.id => CSS class.
|
|
)
|