How to remove border line of the circles at fviz_pca_biplot in R?

525 views Asked by At

I have one data below

df<-structure(list(SEASON = c("Low D", "Low D", "Low D", "Low D",  "Low D", "Low D", "Low D", "Low D", "Low D", "Low D", "High D",  "High D", "High D", "High D", "High D", "High D", "High D", "High D",  "High D", "High D"), GENOTYPE = c("A", "B", "C", "D", "E", "F",  "G", "H", "I", "J", "A", "B", "C", "D", "E", "F", "G", "H", "I",  "J"), Y1 = c(16.95, 16.25, 16.1, 16.25, 17.25, 17.7, 15.75, 17.5,  16.9, 16.95, 15.95, 16.15, 15.4, 15.45, 16.5, 17, 15.8, 17.5,  16.55, 16.95), Y2 = c(36.325, 35.425, 38.175, 36.3, 35.225, 36,  35, 33.15, 34.975, 35.35, 29.55, 30.225, 33.35, 30.7, 30.35,  30.8, 31.95, 27.5, 30.075, 28.825), Y3 = c(242.475, 237.15, 234.307692307692,  243.75, 232.575, 257.4, 223.875, 241.35, 235.65, 239.275, 163.85,  177.4, 158.675, 171.95, 161.625, 181.65, 173.175, 166.05, 174.717948717949,  178.875), Y4 = c(206.375, 206.525, 206.230769230769, 210.925,  201.7, 223.5, 199.725, 211.8, 206.525, 211.75, 141.175, 154.075,  142.575, 148.925, 140.675, 157.65, 155.475, 143.35, 153.230769230769,  155.575), Y5 = c(70.775, 71.225, 70.825, 73.1499999999999, 71.925,  71.25, 73.625, 70.8, 70.1, 72.225, 70.65, 71.7999999999999, 72.25,  71.5, 70.3, 71.5, 72.5, 69.65, 69.1750000000001, 72.75), Y6 = c(615.6,  575.5, 615.4, 589.9, 606.4, 636.6, 551.55, 579.5, 589.4, 598.7,  470.15, 488.8, 512.5, 474.1, 500.75, 524.7, 504.9, 484.1, 497.25,  489), Y7 = c(335.539195565588, 359.834917608241, 335.575951966647,  357.790692959951, 333.286528104675, 353.588506032236, 364.366872182404,  366.16286093936, 351.99769389574, 352.409644879114, 302.158050528416,  314.464169350194, 278.31031721728, 313.875605554085, 279.951178433919,  300.141203224282, 308.802753249051, 292.681876126123, 308.529108917156,  317.955004237038)), row.names = c(NA, -20L), class = "data.frame")

Now, I conduct Principle component analysis.

pca<- prcomp(df[, c(-1,-2)], scale = TRUE)

fviz_pca_biplot(pca, label = "var", col.var="Black",labelsize = 4, 
                arrowsize = 0.3, pointsize=2, repel = TRUE, habillage = df$SEASON,
                addEllipses = TRUE, palette = c("grey25", "grey65")) +
  labs(title="") +
  scale_x_continuous(breaks= seq(-4,4,1), limits = c(-4,4)) +
  theme_grey(base_size=16, base_family="serif")+
  theme(axis.line= element_line(size=0.5, colour="black"),
        axis.title.y= element_text (margin = margin(t=0, r=0, b=0, l=0)),
        legend.position = c(0.9,0.1),
        legend.title = element_blank(),
        legend.key = element_rect(color = "white", fill = "white"),
        legend.background= element_rect(fill= alpha("grey",.05)),
        plot.margin= margin(-0.5,0.5,0,0.3,"cm"))+
  windows(width=6, height=5.5)

enter image description here

This is a graph for PCA.

Now, I'd like to

  1. delete the border of circles.
  2. provide transparent color in circles (i.e. 60% transparent in blue at Low D).
  3. change the point shape to round in both groups (At Low D, it's triangle now).

Could you tell me how to do it?

Many thanks!!

2

There are 2 answers

0
Quinten On BEST ANSWER

To change the borderline of the ellipses, you could use ggplot_build and change the linetype to "blank" like this:

library(factoextra)
library(ggplot2)
p <- fviz_pca_biplot(pca, label = "var", col.var="Black",labelsize = 4, 
                arrowsize = 0.3, pointsize=2, repel = TRUE, habillage = df$SEASON,
                addEllipses = TRUE, palette = c("grey25", "grey65")) +
  labs(title="") +
  scale_x_continuous(breaks= seq(-4,4,1), limits = c(-4,4)) +
  theme_grey(base_size=16, base_family="serif")+
  theme(axis.line= element_line(size=0.5, colour="black"),
        axis.title.y= element_text (margin = margin(t=0, r=0, b=0, l=0)),
        legend.position = c(0.9,0.1),
        legend.title = element_blank(),
        legend.key = element_rect(color = "white", fill = "white"),
        legend.background= element_rect(fill= alpha("grey",.05)),
        plot.margin= margin(-0.5,0.5,0,0.3,"cm"))

q <- ggplot_build(p)
q$data[[2]]$linetype = "blank"
q <- ggplot_gtable(q)
plot(q)

Created on 2022-09-10 with reprex v2.0.2

0
Elbert Kendricks On

use "ellipse.border.remove" argument

fviz_pca_ind(res.pca,
              col.ind = treatment, # color by groups
              col.var = "steelblue",
              palette = col,
              mean.point = FALSE,
              addEllipses = TRUE, # Concentration ellipses
              pointsize=2,
              ellipse.type = "confidence",
              ellipse.alpha = 0.35,
              alpha.ind=1, 
              label=FALSE,
              repel = FALSE,
              show.legend=FALSE,
              ellipse.level = 0.95, # Lower confidence level
              legend.title = "Group",
              ellipse.border.remove = TRUE)

For more information, https://github.com/kassambara/factoextra/blob/master/R/fviz_pca.R