Q: ggbiplot_前景箭头;如何改变箭头颜色

3

我有一个大型数据集,想要绘制PCA。我对结果图相当满意,但我想改变一些东西:

箭头:它们似乎在背景中被数据点覆盖了。 1)如何将它们置于前景? 2)如何更改颜色和字体大小?

椭圆: 3)如何使线条更粗?

图例: 4)如何将其放在图本身的右上角?

提前致谢!

这是我得到那张图的方法:

g <- ggbiplot(LS_3.pca, choices = 1:2, scale = 1, pc.biplot =
       TRUE, obs.scale = 1, var.scale = 1, groups =
       LS.loc, ellipse = TRUE, ellipse.prob = 0.98, labels =
       NULL, labels.size = 5, alpha = 0.25, circle
     = FALSE, circle.prob = 0.69, varname.size = 5,
     varname.adjust = 1.5, varname.abbrev = FALSE, var.axes = TRUE)
g <- g + xlim(-8, 6) + ylim(-4, 6)
g <- g + theme_classic()

print(g)
2个回答

5

ggbiplot返回一个“ggplot”类的对象。如果您检查此对象,您会发现它包含一个名为“layers”的列表。geom_segment层出现在geom_point层之前。您想重新排序这些层。如果geom_segment层是4个图层中的第2个,则可以执行以下操作(例如):

myplot$layers <- c(myplot$layers, myplot$layers[[2]])

这将在列表末尾添加一个额外的层(绘制箭头),并且此层将在绘制点(在前一层中)之后绘制。这种方法足以提供您需要的功能。
编辑:我意识到这个答案只涵盖了将箭头放在前景的问题。这是我遇到的问题,所以我在这里提供我的解决方案供其他人使用。要解决其他问题,建议在控制台键入:
ggbiplot

without the parentheses,它将列出函数体。将其剪切并粘贴到一个新的R脚本中,定义一个新函数(例如“my_ggbiplot”),然后进行调整以获得您想要的效果。这不是一个很长的函数,并且很容易弄清楚每个部分的作用。但是,为了强调箭头,上述一行修复代码就能奏效。


1

我对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. - 使用geom_segment调用中的colour参数更改箭头颜色。在geom_text调用中修改标签的字体size

Q3. - 再次,更改stat_ellipse调用中的size参数。

Q4. - theme调用将解决此问题,c(1,1)表示图例应出现在绘图中的位置,0为左侧,1为右侧。

这并不完全理想,因为您必须手动指定箭头标签的PCAloadings $ Offset,并且可能需要进行一些试错才能获得所需的距离,甚至可能需要为每个标签输入自定义数字到数据框中。但是,您现在可以自由地像通常一样使用ggplot的其余部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接