我对ggbiplot
的限制感到沮丧,因此复制了函数中的代码部分,用于标准的ggplot
调用。
DATA <- data.frame(iris)
PCA <- prcomp(iris[,1:4])
PCAvalues <- data.frame(Species = iris$Species, PCA$x)
PCAloadings <- data.frame(Variables = rownames(PCA$rotation), PCA$rotation)
PCAloadings$Angle = ((180/pi) * atan(PCAloadings$PC2/PCAloadings$PC1))
PCAloadings$Offset <- ((-2 * sign(PCAloadings$PC1))/2)
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. - 使用geom_segment
调用中的colour
参数更改箭头颜色。在geom_text
调用中修改标签的字体size
。
Q3. - 再次,更改stat_ellipse
调用中的size
参数。
Q4. - theme
调用将解决此问题,c(1,1)
表示图例应出现在绘图中的位置,0
为左侧,1
为右侧。
这并不完全理想,因为您必须手动指定箭头标签的PCAloadings $ Offset
,并且可能需要进行一些试错才能获得所需的距离,甚至可能需要为每个标签输入自定义数字到数据框中。但是,您现在可以自由地像通常一样使用ggplot
的其余部分。