I am using sfdp_layout.

How can i modify it so nodes do not overlap each other alot and can show edges?
Graph going to be huge (Millon of nodes) so what is best algorithm for it ? 

below is my result and code of 70k nodes (email conversation) :

def draw_graph(userdict,edges):
    g = Graph()
    g.add_vertex(len(userdict))
    for edg in edges:
        g.add_edge(*edg)
        
    #pos = sfdp_layout(g, C=0.8 , K=4, cooling_step=0.69)
    pos = sfdp_layout(g,p=10, cooling_step=0.69)
    for vertex in g.vertices():
        print pos[vertex]
    return g

Thanks

Phyo.