Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Specifying colour, transparency and position of arrows (line segments) in ggbiplot

I am creating a PCA biplot with multivariate data.

Is there a way to specify the colour/transparency/position of line segments in ggbiplot? None of the arguments to this command provide this option.

I know ggbiplot is based on ggplot - does it perhaps accept aes arguments? Or can one layer colour/transparency/position over the created plot to override defaults?

Specifically, regarding position, I would like to jitter the line segments if this is possible (although making them more transparent will probably solve the problem already).

Working example, using the iris data:

#load required packages
library(ggplot2)
library(devtools)
library(ggbiplot)

#load dataset
data(iris)

#perform principal component analysis
pca = prcomp(iris[ , 1:4], scale=T)

#define classes, generate & view PCA biplot
class = iris$Species
ggbiplot(pca, obs.scale = 1, var.scale = 1, groups = class, circle = FALSE, 
         varname.size = 1, varname.adjust = 6)

Thanks very much - any help is appreciated!

Kind regards.

like image 442
JanP Avatar asked Oct 19 '25 14:10

JanP


1 Answers

It seems that you need to change the ggbiplot function slightly. Type ggbiplot in the console, copy the code to an editor. In the arglist in the function, add "name = expression" terms for color, line type and transparency ("alpha") for the arrows.

ggbiplot2 <- function (pcobj, choices = 1:2, scale = 1, pc.biplot = TRUE, 
          obs.scale = 1 - scale, var.scale = scale, groups = NULL, 
          ellipse = FALSE, ellipse.prob = 0.68, labels = NULL, labels.size = 3, 
          alpha = 1, var.axes = TRUE, circle = FALSE, circle.prob = 0.69, 
          varname.size = 3, varname.adjust = 1.5, varname.abbrev = FALSE, 
          color = muted("red"), # <- add new arguments to the function
          linetype = "solid",
          alpha_arrow = 1) 

Then search for the geom_segment part, and add arguments for color, linetype and alpha:

g <- g + geom_segment(data = df.v, aes(x = 0, y = 0, xend = xvar, yend = yvar),
                      arrow = arrow(length = unit(1/2, "picas")),
                      color = color, linetype = linetype, alpha = alpha_arrow)

Assign the edited function to a new name, e.g. ggbiplot2. Try it, where you set values other than the default for the arrows:

ggbiplot2(pca, obs.scale = 1, var.scale = 1, groups = class, circle = F, varname.size = 1, varname.adjust = 6,
color = "blue", linetype = "dashed", alpha_arrow = 0.5) # <- use the new arguments

enter image description here

like image 151
Henrik Avatar answered Oct 21 '25 02:10

Henrik



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!