Change point colors and color of frame/ellipse around points

Alannie-Grace Grant picture Alannie-Grace Grant · Nov 10, 2015 · Viewed 26.3k times · Source

I want to start by saying that I am a novice user of R and especially of this website, so if it is necessary that I clarify anything here, please let me know! I don't quite understand everything yet, so please feel free to "dumb down" as possible.

Question: I want to create PCA graphs depicting two groups (in this case species). I also want to draw ellipses or frames around them.

Thankfully I have accomplished this task using ggplot2! However, I am not able to change the colors of the points or ellipses/frames beyond the defaults.

Can you please offer some assistance on this matter?

Please see example code below, which is just the traditional iris data set often used in PCA examples.

###load in plackages###
library(ggbiplot)
library(ggfortify)
library(cluster)

#my actual data is very similar to the iris data, though in my data the     "Species" column is first
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
df <- iris[c(1, 2, 3, 4)]
autoplot(prcomp(df))
autoplot(prcomp(df), data = iris, colour = 'Species') #pca graph with   species depicted in different colors

PCA GRAPH OF SPECIES DEPICTED IN DIFFERENT COLORS

autoplot(prcomp(df), data = iris, colour = 'Species', shape='Species', frame=T) 

PCA GRAPH WITH FRAMES AROUND POINTS

Answer

Matias Andina picture Matias Andina · Nov 11, 2015

I have made the same PCA

data<-iris
df<-iris[c(1, 2, 3, 4)]
PC<-prcomp(df)
PCi<-data.frame(PC$x,Species=data$Species)

Now you do the normal plot and change ggplot parameters as usual

ggplot(PCi,aes(x=PC1,y=PC2,col=Species))+
   geom_point(size=3,alpha=0.5)+ #Size and alpha just for fun
   scale_color_manual(values = c("#FF1BB3","#A7FF5B","#99554D"))+ #your colors here
   theme_classic()

enter image description here

Also, check scale_fill_manual for the frame

EDIT

I thought that adding a frame should be easier, check here https://stats.stackexchange.com/questions/22805/how-to-draw-neat-polygons-around-scatterplot-regions-in-ggplot2
and here ggplot2: geom_polygon with no fill

Also, I still believe that ggbiplot should handle scale_color_manual and scale_fill_manual, could you update your question that fails?