  Readability criteria, such as distance or neighborhood preservation, are
often used to optimize node-link representations of graphs to enable the
comprehension of the underlying data. With few exceptions, graph drawing
algorithms typically optimize one such criterion, usually at the expense of
others. We propose a layout approach, Graph Drawing via Gradient Descent,
$(GD)^2$, that can handle multiple readability criteria. $(GD)^2$ can optimize
any criterion that can be described by a smooth function. If the criterion
cannot be captured by a smooth function, a non-smooth function for the
criterion is combined with another smooth function, or auto-differentiation
tools are used for the optimization. Our approach is flexible and can be used
to optimize several criteria that have already been considered earlier (e.g.,
obtaining ideal edge lengths, stress, neighborhood preservation) as well as
other criteria which have not yet been explicitly optimized in such fashion
(e.g., vertex resolution, angular resolution, aspect ratio). We provide
quantitative and qualitative evidence of the effectiveness of $(GD)^2$ with
experimental data and a functional prototype:
\url{http://hdc.cs.arizona.edu/~mwli/graph-drawing/}.
