Written and maintained by CASRAI Editorial Board
Last updated
A scree plot is a line plot of the eigenvalues of a correlation (or covariance) matrix, ordered from largest to smallest. It is used in principal component analysis (PCA) and exploratory factor analysis to help decide how many components or factors to keep. The usual reading is to look for the “elbow”, the point where the line stops dropping steeply and flattens out. This guide shows the arithmetic behind the plot on a four-variable example you can reproduce, how to read the elbow, why the method is treated with caution, and how to draw the plot in R, Python and Excel.
What is a scree plot?
A scree plot shows how much variance each successive component accounts for. The horizontal axis is the component (or factor) number, 1, 2, 3 and so on. The vertical axis is that component’s eigenvalue. Because eigenvalues are sorted in descending order, the line always slopes downward, steeply at first and then more gently.
The name and the test come from Raymond B. Cattell, who introduced the scree test for the number of factors in 1966 (Cattell, R. B., Multivariate Behavioral Research, 1(2), 245-276, doi:10.1207/s15327906mbr0102_10). The plot is named by analogy with the loose rubble at the foot of a cliff: the steep drop is the cliff, the flat tail is the debris. Components in the tail are treated as the “scree” and are not retained.
The quantities behind the plot
For a PCA run on a correlation matrix R of p variables:
- λk (lambda) is the k-th eigenvalue of R, with λ1 ≥ λ2 ≥ … ≥ λp. It is the variance of the k-th principal component.
- Σλk = p. For a correlation matrix the eigenvalues sum to the number of variables, because each standardised variable has variance 1 and the trace of R is p.
- Proportion of variance for component k = λk / p. Cumulative proportion is the running total of these.
The R documentation for screeplot states that it “plots the variances against the number of the principal component”. In a PCA of standardised variables those variances are the eigenvalues, that is, the squared standard deviations (sdev^2) of the components.
Worked example: four variables, two clusters
Take four standardised variables A, B, C and D with this correlation matrix. A and B correlate strongly with each other (0.6), C and D correlate with each other (0.5), and the two pairs are weakly related (0.1 across).
| A | B | C | D | |
|---|---|---|---|---|
| A | 1 | 0.6 | 0.1 | 0.1 |
| B | 0.6 | 1 | 0.1 | 0.1 |
| C | 0.1 | 0.1 | 1 | 0.5 |
| D | 0.1 | 0.1 | 0.5 | 1 |
The matrix is symmetric under swapping A with B and C with D, so its eigenvectors split into two groups and the eigenvalues can be found by hand.
- Contrast vectors. The vector (1, -1, 0, 0) gives λ = 1 – 0.6 = 0.4. The vector (0, 0, 1, -1) gives λ = 1 – 0.5 = 0.5.
- Sum vectors. Using the unit vectors (1, 1, 0, 0)/√2 and (0, 0, 1, 1)/√2, the 2 × 2 matrix is [[1 + 0.6, 0.2], [0.2, 1 + 0.5]] = [[1.6, 0.2], [0.2, 1.5]]. The 0.2 comes from (1/2) × four cross-correlations of 0.1.
- Solve the 2 × 2. The mean of the diagonal is 1.55 and half the difference is 0.05, so λ = 1.55 ± √(0.05² + 0.2²) = 1.55 ± 0.2062, giving 1.756 and 1.344.
- Check. 1.756 + 1.344 + 0.5 + 0.4 = 4.000 = p. A numerical eigen-solver (NumPy
eigvalsh) returns the same four values.
| Component | Eigenvalue | % of variance | Cumulative % |
|---|---|---|---|
| 1 | 1.756 | 43.9 | 43.9 |
| 2 | 1.344 | 33.6 | 77.5 |
| 3 | 0.500 | 12.5 | 90.0 |
| 4 | 0.400 | 10.0 | 100.0 |
Percentages are λ / 4 × 100, for example 1.756 / 4 = 0.439.
How to interpret a scree plot
Plot the four eigenvalues against 1 to 4. The line falls by 0.41 from component 1 to 2, by 0.84 from 2 to 3, and by only 0.10 from 3 to 4. The break is after component 2: the steep section ends there and the line is nearly flat afterwards. Reading the elbow this way points to two components, which matches the two-cluster structure built into the matrix.
Say in your write-up whether you counted the components before the flat tail or included the one at the bend, so readers can reproduce your decision. In the example the flat tail begins at component 3, so two components are kept.
| What you see | Reading |
|---|---|
| One sharp drop, then a flat line | The elbow rule suggests keeping the components before the flat tail. |
| A gradual, even slope with no clear bend | The test gives no clear answer; do not force an elbow. |
| Two or more bends | The test is ambiguous; compare the candidate solutions with other criteria. |
Assumptions and common mistakes
- The test is subjective. The EFAtools documentation notes that, as the scree test requires visual examination, it “has been especially criticized for its subjectivity”, and that it has been recommended against, at least for exclusive use as a factor retention criterion (Zwick and Velicer, 1986). Use it alongside other retention criteria rather than alone.
- The diagonal matters. In factor analysis software the eigenvalues can come from a matrix with 1s on the diagonal (PCA), squared multiple correlations (SMC), or final communalities (EFA). Each option gives a different plot, so name the one used. See the exploratory factor analysis guide for how EFA differs from PCA.
- Axes change the look. Software defaults differ (bars or lines, variance or proportion of variance), and stretching the vertical axis can create or hide an elbow. Plot eigenvalues on a plain linear axis starting at 0.
- Check the data first. A scree plot of a matrix that is not suited to factoring is not informative. Tests such as those in the KMO and Bartlett’s test guide come before this step. For ordinal items, a polychoric correlation matrix may be the right input.
How to report a scree plot
A reporting sentence along these lines is a reasonable pattern; adapt it to your analysis and journal style:
A principal component analysis was run on the four standardised items. Inspection of the scree plot showed a clear change of slope after the second component, and a two-component solution was retained, accounting for 77.5% of the total variance (eigenvalues 1.76 and 1.34).
Report the eigenvalues and cumulative variance, say which matrix was analysed, and state any other retention criteria you used. Include the plot as a figure if the decision is not obvious from the numbers. For software-specific output, see the CASRAI guides to PCA in SPSS and PCA in Stata, and for what to do with the retained components, factor scores.
How to make a scree plot in R, Python or Excel
R
fit <- prcomp(mydata, scale. = TRUE) # PCA on the correlation matrix
screeplot(fit, npcs = min(10, length(fit$sdev)), type = "lines")
fit$sdev^2 # the eigenvalues
# From a correlation matrix R directly:
eigen(R)$values
Per the R manual, type can be "barplot" (the default) or "lines", and npcs sets how many components are drawn.
Python
import numpy as np
import matplotlib.pyplot as plt
R = np.array([[1, .6, .1, .1],
[.6, 1, .1, .1],
[.1, .1, 1, .5],
[.1, .1, .5, 1]])
eigvals = np.sort(np.linalg.eigvalsh(R))[::-1] # [1.756 1.344 0.5 0.4]
plt.plot(range(1, len(eigvals) + 1), eigvals, marker="o")
plt.xlabel("Component number"); plt.ylabel("Eigenvalue")
plt.show()
Excel
Excel has no built-in eigenvalue function, so compute the eigenvalues in R, Python or your statistics package and paste them in a column beside the numbers 1, 2, 3… Then select both columns and insert a line chart with markers (Insert, Charts, Line with Markers). Title the axes “Component number” and “Eigenvalue”.
FAQ
What is a scree plot used for?
It helps decide how many components or factors to retain in PCA or exploratory factor analysis, by showing where the eigenvalues level off.
How do I read the elbow of a scree plot?
Find the point where the steep decline ends and the line becomes roughly flat. The components before the flat tail are the candidates to keep. In the example above that is after component 2.
What if there is no clear elbow?
Then the scree test does not give a clear answer on its own. The subjectivity of the test is a documented criticism, so compare it with other retention rules and with whether the solution is interpretable.
Are eigenvalues and variances the same thing in a scree plot?
For a PCA of a correlation matrix, yes: each eigenvalue is the variance of its component, and the eigenvalues add up to the number of variables. R’s screeplot plots these variances.
Sources
All links checked 2026-10-29.
- Cattell, R. B. (1966). The scree test for the number of factors. Multivariate Behavioral Research, 1(2), 245-276. https://doi.org/10.1207/s15327906mbr0102_10. Bibliographic record: https://pubmed.ncbi.nlm.nih.gov/26828106/
- R Core Team. screeplot, R stats package manual: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/screeplot.html
- EFAtools package documentation, efa_scree: https://rdrr.io/cran/EFAtools/man/efa_scree.html. It cites Zwick, W. R., and Velicer, W. F. (1986) on comparing rules for the number of components to retain.








