# How to interpret the representation of data in principal plane?

I have the data X contains the grades of some students in 4 subjects:

       Math Phys   Fr  Ang
Benny   6.0  6.0  5.0  5.5
Bobby   8.0  8.0  8.0  8.0
Brandy  6.0  7.0 11.0  9.5
Coby   14.5 14.5 15.5 15.0
Daisy  14.0 14.0 12.0 12.5
Emily  11.0 10.0  5.5  7.0
Judy    5.5  7.0 14.0 11.5
Marty  13.0 12.5  8.5  9.5
Sandy   9.0  9.5 12.5 12.0


Then I do PCA to get the projection of this data matrix into the space spanned by two first components. Then I plot them and have a graph

To me, the graph only shows the coordinate of our original data in the principal plane. Could you please elaborate on how to interpret (or get meaningful insights) from this graph?

What you have is a (labeled) scatterplot. To a first approximation, what you can learn from this is what you can learn from any scatterplot.

Probably what would help is to think about what PCA does. The text below is copied from my answer here:

Put simply, PCA (as most typically run) creates a new coordinate system by:

1. shifting the origin to the centroid of your data,
2. squeezes and/or stretches the axes to make them equal in length, and
3. rotates your axes into a new orientation.

(For more details, see this excellent CV thread: Making sense of principal component analysis, eigenvectors & eigenvalues.)

Let's take a look at your data and see if we can make sense of what is in your plot. (I don't know what "Fr" and "Ang" are, so I will interpret them as French and Anglish, which are humanities classes in literature and foreign language depending on whether you live in France or the land of the Angles.) Below, I read in your data, compute the correlation matrix and make the scatterplot matrix. Then I compute the PCA and make the scatterplot matrix of the data rerepresented in the new coordinate system.

d = read.table(text="name   Math Phys   Fr  Ang
Benny   6.0  6.0  5.0  5.5
...
Coby   14.5 14.5 15.5 15.0
...
Emily  11.0 10.0  5.5  7.0
Judy    5.5  7.0 14.0 11.5
rownames(d) = d$name d = d[,2:5] round(cor(d), digits=2) # Math Phys Fr Ang # Math 1.00 0.98 0.23 0.51 # Phys 0.98 1.00 0.40 0.65 # Fr 0.23 0.40 1.00 0.95 # Ang 0.51 0.65 0.95 1.00 windows() pairs(d) pca.d = prcomp(d, scale=TRUE); pca.d # Standard deviations (1, .., p=4): # [1] 1.69578500 1.05815281 0.05981296 0.03237707 # # Rotation (n x k) = (4 x 4): # PC1 PC2 PC3 PC4 # Math 0.4784540 0.5519489 -0.2025732 -0.6522256 # Phys 0.5319172 0.4068018 0.4412026 0.5974251 # Fr 0.4439304 -0.6212336 0.5324079 -0.3654264 # Ang 0.5395106 -0.3793856 -0.6934308 0.2900837 windows() pairs(pca.d$x)