微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将文本添加到ggpairs散点图吗?

如何解决将文本添加到ggpairs散点图吗?

愚蠢但令人困惑的问题:如何在ggpairs(...)图中将文本标签添加到散点图的ggpairs(...)来自Ggally库。普通的geom_text(...)函数似乎不是一个选择,因为它带有x,y参数,而ggpairs创建了一个NxN矩阵,其中包含样式不同的图。

不显示数据,但是假设我有一个名为“ ID”的列,其中散点图中显示了每个点的ID。

乐于添加数据(如果有帮助),但不确定是否有必要。也许答案很简单,就是不可能向ggpairs(...)添加文本标签

library(ggplot2)
library(Ggally)

ggpairs(hwWrld[,c(2,6,4)],method = "pearson")

enter image description here

注意:添加标签仅供我个人参考。因此,无需告诉我,它看起来绝对是一团糟。它会。我只是想找出我的离群值。

谢谢!

解决方法

这肯定是有可能的。在查看?GGally::ggpairs的文档时,有三个自变量upperlowerdiag,从文档的详细信息来看,这是

上方和下方是可能包含变量“连续”,“组合”,“离散”和“ na”的列表。列表中的每个元素都可以是函数或字符串

...(更多描述)

如果函数作为上,下或诊断的选项提供,则应实现function(data,mapping,...){#make ggplot2 plot}的函数api。如果特定功能需要设置其参数,请wrap(fn,param1 = val1,param2 = val2)将该功能及其参数设置。

因此,“制作标签”的一种方法将是覆盖绘图的默认值。例如,如果我们想在上面的三角形中写“ hello world”,我们可以做类似的事情:

library(ggplot2)
library(GGally)
#' Plot continuous upper function,by adding text to the standard plot
#' text is placed straight in the middle,over anything already residing there!
continuous_upper_plot <- function(data,text,...){
  p <- ggally_cor(data,...)
  if(!is.data.frame(text))
    text <- data.frame(text = text)
  lims <- layer_scales(p)
  p + geom_label(data = text,aes(x = mean(lims$x$range$range),y = mean(lims$y$range$range),label = text),inherit.aes = FALSE) 
}
ggpairs(iris,upper = list(continuous = wrap(continuous_upper_plot,text = 'hello world')))

,最终结果是: enter image description here

这里要注意三件事:

  1. 我决定在函数本身中添加文本。如果您的文本是现有数据的一部分,则在调用函数时只需使用mappingaes)参数即可。而且,这也可能会更好,因为您希望将文本添加到特定点。
  2. 如果您对函数有其他任何参数(在datamapping之外),则需要使用wrap将它们添加到调用中。
  3. 函数文档特别指出,参数应为data,mapping,而不是ggplot2的标准mapping,data。因此,对于任何ggplot函数,都需要一个小的包装程序来切换其位置,以覆盖ggpairs的默认参数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。