How can one modify the outline color of a node In networkx?

UPDATE (3/2019): as of networkx 2.1, the kwargs are forwarded from draw(), so you should be able to simply call draw() with the edge_color kwarg.

Ok, this is kind of hacky, but it works. Here’s what I came up with.

The Problem

networkx.draw() calls networkx.draw_networkx_nodes(), which then calls pyplot.scatter() to draw the nodes. The problem is that the keyword args accepted by draw_networkx_nodes() aren’t passed on to scatter(). (source here)


To solve this, I basically broke apart networkx.draw() into its components: draw_networkx_nodes, draw_networkx_edges, and draw_networkx_labels.

The Solution

We can take the return value of draw_networkx_nodes() — a PathCollection — and operate on that: you can use PathCollection.set_edgecolor() or PathCollection.set_edgecolors() with either a color or a list, respectively.

Example code:

from networkx import *
import matplotlib.pyplot as plt
G = Graph()
G.add_node(1)
# Need to specify a layout when calling the draw functions below
# spring_layout is the default layout used within networkx (e.g. by `draw`)
pos = spring_layout(G)
nodes = draw_networkx_nodes(G, pos)
# Set edge color to red
nodes.set_edgecolor('r')
draw_networkx_edges(G, pos)
# Uncomment this if you want your labels
## draw_networkx_labels(G, pos)
plt.show()

If you’re going to be using this a lot, it probably makes more sense (IMO) to just redefine draw_networkx_nodes to actually pass the kwargs to scatter. But the above will work.

To remove the marker edges entirely, simply set the color to None instead of 'r'.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)