Input ''''''''''''''' It is important to get the data in the right shape for the javascript file. In ``d3graph``, the input is an adjacency matrix for which the columns and indexes are the nodes and the elements with a values larger than 0 are an edge. The data is converted in a *json-file* and is embedded in the final HTML file. By embedding the data directly in the HTML file will integrate all scripts and data into a single file which can be very practical. Note that depending on the amount of data, it can result in a heavy HTML file. In its simplest form, the input for ``d3.graph()`` is an adjacency matrix in the form of a ``pd.DataFrame()``. The index names are the *source* nodes and the column names the *target* nodes. An edge is created when the vertice between the source and target is larger than 0. This value also represents the strength of the edge. Adjacency matrix --------------------------------- Example of a simple adjacency matrix with 4 nodes. The *True* booleans represent the value 1 and the *False* the value 0. .. table:: +-----------+--------+-----------+--------+-----------+ | | Node 1 | Node 2 | Node 3 | Node 4 | +===========+========+===========+========+===========+ | Node 1 | False | True | True | False | +-----------+--------+-----------+--------+-----------+ | Node 2 | False | False | False | True | +-----------+--------+-----------+--------+-----------+ | Node 3 | False | False | False | True | +-----------+--------+-----------+--------+-----------+ | Node 4 | False | False | False | False | +-----------+--------+-----------+--------+-----------+ The following edges will be created: * (Node 1, Node 2) * (Node 1, Node 3) * (Node 2, Node 4) * (Node 3, Node 4) Let's load the *bigbang* network example and examine the adjacency matrix. Here we can clearly see that the source nodes are the index names and and target nodes ar the column names. .. code:: python # Import library from d3graph import d3graph # Initialize d3 = d3graph() # Load example adjmat = d3.import_example('bigbang') print(adjmat) # target Amy Bernadette Howard Leonard Penny Rajesh Sheldon # source # Amy 0.0 2.0 0.0 0.0 0.0 0.0 0.0 # Bernadette 0.0 0.0 5.0 0.0 0.0 2.0 0.0 # Howard 0.0 0.0 0.0 0.0 0.0 0.0 0.0 # Leonard 0.0 0.0 0.0 0.0 0.0 0.0 0.0 # Penny 3.0 0.0 0.0 5.0 0.0 0.0 0.0 # Rajesh 0.0 0.0 0.0 0.0 2.0 0.0 0.0 # Sheldon 5.0 0.0 2.0 3.0 0.0 0.0 0.0 Create adjacency matrix --------------------------------- A manner to create a network is by specifying the *source* to *target* nodes with its weights. The function ``vec2adjmat`` helps doing this: :func:`d3graph.d3graph.d3graph.vec2adjmat`. In the following example we will create the *bigbang* network from scratch: .. code:: python # Import library from d3graph import d3graph, vec2adjmat # Source node names source = ['Penny', 'Penny', 'Amy', 'Bernadette', 'Bernadette', 'Sheldon', 'Sheldon', 'Sheldon', 'Rajesh'] # Target node names target = ['Leonard', 'Amy', 'Bernadette', 'Rajesh', 'Howard', 'Howard', 'Leonard', 'Amy', 'Penny'] # Edge Weights weight = [5, 3, 2, 2, 5, 2, 3, 5, 2] # Convert the vector into a adjacency matrix adjmat = vec2adjmat(source, target, weight=weight) # Initialize d3 = d3graph() d3.graph(adjmat) d3.show() .. raw:: html Output ''''''''''''''' The output is a single HTML file that contains all scripts and data that forms the interactive force-directed graph. If no output directory is specfied, the *systems temporary directory* will be used. The following example will write the final HTML to a custom directory with a custome file name. .. code:: python # Import library from d3graph import d3graph, vec2adjmat # Initialize d3 = d3graph() # Load example adjmat = d3.import_example('bigbang') d3.graph(adjmat) # Write to specified directory with custom filename d3.show(filepath='c://temp/d3graph_bigbang.html') .. raw:: html .. include:: add_bottom.add