我对 的限制感到沮丧ggbiplot
,因此从函数中复制了代码部分以在标准ggplot
调用中使用。
# Load data
DATA <- data.frame(iris)
# Do PCA
PCA <- prcomp(iris[,1:4])
# Extract PC axes
PCAvalues <- data.frame(Species = iris$Species, PCA$x)
# Extract loadings of the variables
PCAloadings <- data.frame(Variables = rownames(PCA$rotation), PCA$rotation)
# Calculate the angles and the label offset
PCAloadings$Angle = ((180/pi) * atan(PCAloadings$PC2/PCAloadings$PC1))
PCAloadings$Offset <- ((-2 * sign(PCAloadings$PC1))/2)
# Plot
ggplot(PCAvalues, aes(x = PC1, y = PC2, colour = Species)) +
stat_ellipse(level = 0.95, size = 2, show.legend = FALSE) +
geom_point(size = 3) +
geom_segment(data = PCAloadings, aes(x = 0, y = 0, xend = (PC1), yend = (PC2)),
arrow = arrow(length = unit(1/2, "picas")), color = "black") +
geom_text(data = PCAloadings, aes(label = Variables, x = (PC1), y = (PC2)),
color = "black", size = 4, angle = PCAloadings$Angle, hjust =
PCAloadings$Offset) +
theme_classic() +
theme(legend.justification = c(1,1), legend.position = c(1,1))
答案:
Q1。- 正如@Andrew John Lowe 在他的回答中所说,这些图层是按照您输入它们的顺序生成的,所以如果该geom_segment
行是最后一行,它将出现在顶部。
Q2。colour
- 使用调用中的参数更改箭头颜色geom_segment
。更改调用size
中标签的字体。geom_text
Q3。- 再次,更改调用size
中的参数stat_ellipse
。
Q4。-theme
调用将解决此问题,c(1,1)
指示图例应出现在图中的位置,0
左侧和1
右侧。
这并不完全理想,因为您必须PCAloadings$Offset
手动指定箭头标签,并且可能需要一些试验和错误才能获得所需的距离,甚至需要在每个标签的数据框中输入自定义数字。但是,您现在可以ggplot
像往常一样自由使用其余部分。