如何解决将文本添加到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")
注意:添加标签仅供我个人参考。因此,无需告诉我,它看起来绝对是一团糟。它会。我只是想找出我的离群值。
谢谢!
解决方法
这肯定是有可能的。在查看?GGally::ggpairs
的文档时,有三个自变量upper
,lower
和diag
,从文档的详细信息来看,这是
上方和下方是可能包含变量“连续”,“组合”,“离散”和“ 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')))
这里要注意三件事:
- 我决定在函数本身中添加文本。如果您的文本是现有数据的一部分,则在调用函数时只需使用
mapping
(aes
)参数即可。而且,这也可能会更好,因为您希望将文本添加到特定点。 - 如果您对函数有其他任何参数(在
data
和mapping
之外),则需要使用wrap
将它们添加到调用中。 - 函数文档特别指出,参数应为
data,mapping
,而不是ggplot2
的标准mapping,data
。因此,对于任何ggplot函数,都需要一个小的包装程序来切换其位置,以覆盖ggpairs
的默认参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。