# [R] From Distance Matrix to 2D coordinates

Peter Langfelder peter.langfelder at gmail.com
Thu Dec 15 19:24:24 CET 2011

```On Thu, Dec 15, 2011 at 10:08 AM, Lorenzo Isella
<lorenzo.isella at gmail.com> wrote:
> Dear All,
> I am struggling with the following problem: I am given a NxN symmetric
> matrix P ( P[i,i]=0, i=1...N and P[i,j]>0 for i!=j) which stands for the
> relative distances of N points.
> I would like use it to get the coordinates of the N points in a 2D plane. Of
> course, the solution is not unique (given one solution, I can translate or
> rotate all the points by the same amount and generate another solution), but
> any correct solution will do for me.
> Any idea about how I can achieve that? Is there any clustering package that
> can help me?
> Many thanks.

If your matrix really corresponds to distances of points (in 2
dimensions), you can try multidimensional scaling, function
cmdscale().

This little code illustrates that cmdscale recovers the 2-dimensional
points used to generate a distance matrix, up to a shift and rotation:

# Generate 10 random points in 2 dimensions
nPoints = 10;
nDim = 2;

set.seed(10);
points = matrix(runif(nPoints * nDim), nPoints, nDim);

# Their distance:
dst = dist(points)

# Classical multidimensional scaling
mds = cmdscale(dst);

# Distance of the points calculated by mds
dst2 = dist(mds);

# The two distances are equal
all.equal(as.vector(dst), as.vector(dst2))

HTH,

Peter

```