The paper Graph Drawing by High-Dimensional Embedding1 presents a approach to draw undirected graphs. This is a Python implementation of the apporach.
from algorithm import GraphDrawing
gd = GraphDrawing() # default dimension is 50
gd.transform('data/grid_50x50.csv')
# now you can retrieve tranformed points by accessing `gd.transformed_points`.
gd.plot("figure.png") # drawing image is slow when solving for large number (1000's) of points
The following are example drawings. Original images are placed in the folder images.