首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Q: ggbiplot _ Foreground箭头;更改箭头颜色

Q: ggbiplot _ Foreground箭头;更改箭头颜色
EN

Stack Overflow用户
提问于 2015-07-02 21:07:41
回答 2查看 3.2K关注 0票数 3

我有一个很大的数据集,并试图绘制一个PCA。我对结果图相当满意,但我想要更改几件事:

箭头:它们看起来像是在背景中,并被数据点覆盖。1)如何突出它们? 2)如何更改颜色和喜欢的大小?

省略: 3)如何使线条更粗?

图例4)如何放在图的右上角?

提前感谢!!

下面是我是如何得到这个图表的:

代码语言:javascript
运行
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2015-12-07 22:09:39

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

代码语言:javascript
运行
复制
myplot$layers <- c(myplot$layers, myplot$layers[[2]])

这将在列表的末尾附加一个额外的图层(绘制箭头),并且该图层将在绘制完点(在上一个图层中)之后绘制。这种攻击足以提供您所需的功能。

编辑:我意识到这个答案只涵盖了将箭头放在前台的问题。这是我遇到的一个问题,所以我在这里提供我的解决方案供其他人使用。要解决其他问题,我建议在控制台输入:

代码语言:javascript
运行
复制
ggbiplot

不带括号,它将列出函数体。剪切并粘贴到一个新的R脚本中,该脚本定义了一个新函数(例如,“my_ggbiplot”)和hack,以获得您想要的东西。这不是一个很长的函数,而且很容易弄清楚所有的功能。但是,为了突出箭头,上面的一行修复将起作用。

票数 5
EN

Stack Overflow用户

发布于 2018-03-29 00:09:58

我对ggbiplot的局限性感到沮丧,所以从函数中复制了代码段,以便在标准的ggplot调用中使用。

代码语言:javascript
运行
复制
# 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的其余部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31185522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档