Yes, this is possible.
the commands draw_networkx_nodes and draw_networkx_labels take as
input pos, the positions of the nodes.
You can predefine pos using one of the standard approaches, or you can
define it yourself.
Here's some code:
from networkx import *
G=fast_gnp_random_graph(10,0.4)
pos = spring_layout(G)
pos
Out[4]:
{0: array([ 0.13389599, 0.74915141], dtype=float32),
1: array([ 0.25590968, 0.83325702], dtype=float32),
2: array([ 0. , 0.7407493], dtype=float32),
3: array([ 0.81820399, 1. ], dtype=float32),
4: array([ 0.58317047, 0.80521286], dtype=float32),
5: array([ 0.4580518, 0. ], dtype=float32),
6: array([ 0.37372372, 0.72822559], dtype=float32),
7: array([ 0.2186895 , 0.57514721], dtype=float32),
8: array([ 0.42905447, 0.29407948], dtype=float32),
9: array([ 0.63760728, 0.49810028], dtype=float32)}
#So this is what pos looks like at that point. Then a call to
#draw_networkx_nodes(G,pos)
#gives a plot of just nodes at those positions. A call to ..._edges
(G,pos) does the same with edges.
#However, if you wanted to you could instead do:
pos = {}
from math import sin
from math import cos
from math import pi
for i in range(10):
pos[i] = [cos(i/10.),sin(i/10.)]
draw_networkx_nodes(G,pos)
#now the nodes are given in a circle.
draw_networkx_edges(G,pos)
#now the edges are plotted as well