I am glad to have found the
GGally is a convenient package built upon
ggplot2 that contains templates for different plots to be combined into a plot matrix through the function
ggpairs. It is a nice alternative to the more limited
pairs function. The package has also functions to deal with parallel coordinate and network plots, none of which I have tried yet.
The following code shows how easy it is to create very informative plots like the one in Figure 1.
require(GGally) data(tips, package="reshape") ggpairs(data=tips, # data.frame with variables columns=1:3, # columns to plot, default to all. title="tips data", # title of the plot colour = "sex") # aesthetics, ggplot2 style
Plots like the one above are very helpful, among others things, in the pre-processing stage of a classification problem, where you want to analyze your predictors given the class labels. It is particularly amazing that we can now use the arguments
alpha provided by
Controlling plot types
We have some control over which type of plots to use. We can choose which type of graph will be used for continuous vs. continuous (continuous), continuous vs. discrete (combo) and discrete vs. discrete (discrete). We can also have different plots for the upper diagonal (upper) and for the lower diagonal (lower).
For example, the code below
pm = ggpairs(data=tips, columns=1:3, upper = list(continuous = "density"), lower = list(combo = "facetdensity"), title="tips data", colour = "sex") print(pm)
creates Figure 2, which uses the same data used in Figure 1, but with a density plot in the upper diagonal for continuous vs. continuous variables and a density plot faceted by a discrete variable in a continuous vs. discrete scenario.
The details section of the help file of the
ggpairs function describes which plots are available for each scenario. Currently, the following are described there:
- continuous: exactly one of ‘points’, ‘smooth’, ‘density’, ‘cor’ or ‘blank’;
- combo: exactly one of ‘box’, ‘dot’, ‘facethist’, ‘facetdensity’, ‘denstrip’ or ‘blank’;
- discrete: exactly one of ‘facetbar’,’ratio’ or ‘blank’.
We can insert a customized plot within a plot matrix created by
ggpairs using the function
putPlot. The following code creates a custom ggplot object
cp and insert it in the second row and third column of the ggpairs object
cp = ggplot(data.frame(x=1:10, y=1:10)) + geom_point(aes(x, y)) putPlot(pm, cp, 2, 3)
We can also retrieve an specific ggplot object from a ggpairs object using the
getPlot function, with the following syntax:
getPlot(plotMatrix, rowFromTop, columnFromLeft)