2

Here's the set up: I have a data frame, df, with columns labeled A,B,...,K. Each entry of column A is unique and will make up one of the two sets of vertices, call it X, in a bipartite graph, G. The entries of columns B,...,K (not all unique) make up the other set of vertices, call it Y, in the bipartite graph. We draw an edge from vertex y in Y to vertex x in X if y is in the same row as x.

Using this answer from another post, I have the following code which creates a bipartite graph with vertex sets given by the entries of column A (positioned on the right) and B (positioned on the left)

G = nx.Graph() 
G.add_nodes_from(df['A'], bipartite=0)
G.add_nodes_from(df['B'], bipartite=1)
G.add_weighted_edges_from(
    [(row['B'], row['A'], 1) for idx, row in df.iterrows()], 
    weight='weight')
pos = {node:[0, i] for i,node in enumerate(df['B'])}
pos.update({node:[1, i] for i,node in enumerate(df['A'])})
nx.draw(G, pos, with_labels = True)
plt.show()

I'm seeking advice/help with a few problems:

  1. The number of vertices is large enough so that the vertices appear very bunched up. Is there a way of spreading out the vertices in each of the two vertex sets?

  2. As I mentioned, this code makes a bipartite graph connecting some entries of B with some entries of A (again, based on row matching). How can I do this for each of the other columns (i.e. connecting elements of C,...,K with A in the same way)? I know there is a way to union graphs together with union(G1,G2) but I imagine there's a better way to achieve this.

  3. I'd like to create some kind of edge coloring based on the degree of vertices in Y. I imagine the coloring will be implemented using the G.degree(), but I'm not sure how that works.

Please let me know if you have any suggestions for my problems. Thanks in advance!

  • 1
    For the positions of the nodes you can play with `pos` by drawing nodes further away, e.g., `pos = {node:[0*i, i*i] for i,node in enumerate(df['B'])}`. Or draw the nodes smaller with `nx.draw(G, pos, with_labels = True, node_size=100)` (or both). – rodgdor Feb 26 '18 at 12:03

0 Answers0