Movatterモバイル変換


[0]ホーム

URL:


High Dimensional Data Visualization

Wayne Oldford and Zehao Xu

2025-10-05

Serialaxes coordinate

Serial axes coordinate is a methodology for visualizing the\(p\)-dimensional geometry and multivariatedata. As the name suggested, all axes are shown in serial. The axes canbe a finite\(p\) space or transformedto an infinite space (e.g. Fourier transformation).

In the finite\(p\) space, all axescan be displayed in parallel which is known as the parallel coordinate;also, all axes can be displayed under a polar coordinate that is oftenknown as the radial coordinate or radar plot. In the infinite space, amathematical transformation is often applied. More details will beexplained in the sub-sectionInfinite axes

A point in Euclidean\(p\)-space\(R^p\) is represented as a polyline inserial axes coordinate, it is found that a point <–> line dualityis induced in the Euclidean plane\(R^2\)(A. Inselberg and Dimsdale 1990).

Before we start, a couple of things should be noticed:

Finite axes

Suppose we are interested in the data setiris. Aparallel coordinate chart can be created as followings:

library(ggmulti)# parallel axes plotggplot(iris,mapping =aes(Sepal.Length = Sepal.Length,Sepal.Width = Sepal.Width,Petal.Length = Petal.Length,Petal.Width = Petal.Width,colour =factor(Species)))+geom_path(alpha =0.2)+coord_serialaxes()-> pp

A histogram layer can be displayed by adding layergeom_histogram

p+geom_histogram(alpha =0.3,mapping =aes(fill =factor(Species)))+theme(axis.text.x =element_text(angle =30,hjust =0.7))

A density layer can be drawn by adding layergeom_density

p+geom_density(alpha =0.3,mapping =aes(fill =factor(Species)))

A parallel coordinate can be converted to radial coordinate bysettingaxes.layout = "radial" in functioncoord_serialaxes.

p$coordinates$axes.layout<-"radial"p

Infinite axes

Andrews (1972) plot is a way to projectmulti-response observations into a function\(f(t)\), by defining\(f(t)\) as an inner product of the observedvalues of responses and orthonormal functions in\(t\)

\[f_{y_i}(t) = <\mathbf{y}_i,\mathbf{a}_t>\]

where\(\mathbf{y}_i\) is the\(i\)th responses and\(\mathbf{a}_t\) is the orthonormal functionsunder certain interval. Andrew suggests to use the Fouriertransformation

\[\mathbf{a}_t = \{\frac{1}{\sqrt{2}},\sin(t), \cos(t), \sin(2t), \cos(2t), ...\}\]

which are orthonormal on interval\((-\pi,\pi)\). In other word, we can project a\(p\) dimensional space to an infinite\((-\pi, \pi)\) space. The following figureillustrates how to construct an “Andrew’s plot”.

p<-ggplot(iris,mapping =aes(Sepal.Length = Sepal.Length,Sepal.Width = Sepal.Width,Petal.Length = Petal.Length,Petal.Width = Petal.Width,colour = Species))+geom_path(alpha =0.2,stat ="dotProduct")+coord_serialaxes()p

A quantile layer can be displayed on top

p+geom_quantiles(stat ="dotProduct",quantiles =c(0.25,0.5,0.75),linewidth =2,linetype =2)

A couple of things should be noticed:

An alternative way to create a serial axes plot

Rather than calling functioncoord_serialaxes, analternative way to create a serial axes object is to add ageom_serialaxes_... object in our model.

For example, Figure 1 to 4 can be created by calling

g<-ggplot(iris,mapping =aes(Sepal.Length = Sepal.Length,Sepal.Width = Sepal.Width,Petal.Length = Petal.Length,Petal.Width = Petal.Width,colour = Species))g+geom_serialaxes(alpha =0.2)g+geom_serialaxes(alpha =0.2)+geom_serialaxes_hist(mapping =aes(fill = Species),alpha =0.2)g+geom_serialaxes(alpha =0.2)+geom_serialaxes_density(mapping =aes(fill = Species),alpha =0.2)# radial axes can be created by# calling `coord_radial()`# this is slightly different, check it out!g+geom_serialaxes(alpha =0.2)+geom_serialaxes(alpha =0.2)+coord_radial()

Figure 5 and 7 can be created by setting “stat” and “transform” ingeom_serialaxes; to Figure 6,geom_serialaxes_quantile can be added to create a serialaxes quantile layer.

Some slight difference should be noticed here:

# The serial axes is `Sepal.Length`, `Sepal.Width`, `Sepal.Length`# With meaningful labelsggplot(iris,mapping =aes(Sepal.Length = Sepal.Length,Sepal.Width = Sepal.Width,Sepal.Length = Sepal.Length))+geom_path()+coord_serialaxes()# The serial axes is `Sepal.Length`, `Sepal.Length`# No meaningful labelsggplot(iris,mapping =aes(Sepal.Length = Sepal.Length,Sepal.Width = Sepal.Width,Sepal.Length = Sepal.Length))+geom_serialaxes()

Also, if the dimension of data is large, typing each variate inmapping aesthetics is such a headache. Parameteraxes.sequence is provided to determine the axes. Forexample, aserialaxes object can be created as

ggplot(iris)+geom_path()+coord_serialaxes(axes.sequence =colnames(iris)[-5])

At very end, please report bugshere. Enjoy the highdimensional visualization! “Don’t panic… Just do it in ‘serial’”(Alfred Inselberg1999).

Reference

Andrews, David F. 1972.“Plots of High-Dimensional Data.”Biometrics, 125–0136.
Gnanadesikan, Ram. 2011.“Methods for Statistical Data Analysis ofMultivariate Observations.” In, 321:207–0218. John Wiley &Sons.
Inselberg, A., and B. Dimsdale. 1990.“Parallel Coordinates: ATool for Visualizing Multi-Dimensional Geometry.” InProceedings of the First IEEE Conference on Visualization:Visualization ‘90, 361–0378.
Inselberg, Alfred. 1999.“Don’t Panic... Just Do It inParallel!”Computational Statistics 14 (1): 53–077.

[8]ページ先頭

©2009-2025 Movatter.jp