我有一个大型数据集,并试图绘制一个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)
答案 0 :(得分:3)
ggbiplot返回类&#34; ggplot&#34;的对象。如果您检查此对象,您将发现它包含一个名为&#34; layers&#34;的列表。 geom_segment图层显示在geom_point图层之前。你想重新排序这些。如果geom_segment图层是第2层的第4层,则可以执行(例如):
myplot$layers <- c(myplot$layers, myplot$layers[[2]])
这将在列表的末尾附加一个额外的图层(绘制箭头),并且在绘制点(在上一图层中)之后绘制该图层。这种黑客足以提供您所需的功能。
编辑:我意识到这个答案只涵盖了将箭头放在前台的问题。这是我遇到的一个问题,所以我在这里提供我的解决方案供其他人使用。为了解决其他问题,我建议在控制台输入:ggbiplot
没有括号,它将列出函数体。剪切并粘贴到一个新的R脚本中,该脚本定义了一个新函数(例如,&#34; my_ggbiplot&#34;)并且黑客可以获得你想要的东西。它不是一个很长的功能,很容易弄清楚一切都做了什么。但是,为了使箭头前景化,上面的单行修复将起作用。
答案 1 :(得分:0)
我对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
。