GGally::ggpairs绘制好像下面的图表.我唯一想要进一步完善它的是删除绘图上部的所有网格线,其中是相关系数.也许还可以在每个上图周围绘制矩形.
library("GGally")
data(iris)
ggpairs(iris[, 1:4], lower=list(continuous="smooth", params=c(colour="blue")),
diag=list(continuous="bar", params=c(colour="blue")),
upper=list(params=list(corSize=6)), axisLabels='show')
Run Code Online (Sandbox Code Playgroud)

这是最小的情况:
df <- data.frame(x=1:5, y=1, col=1:5)
mapping <- aes(x=x, y=y)
ggplot(df, mapping) + geom_point(size=10)
Run Code Online (Sandbox Code Playgroud)
现在我想为现有mapping对象添加(或覆盖)另一种美学(颜色).想要的情节是
ggplot(df, aes(x=x, y=y, colour=col)) + geom_point(size=10)
Run Code Online (Sandbox Code Playgroud)
我确信这有一个便利功能,但它没有在文档中列出,浏览源也没有帮助.我曾经偶然发现了类似的东西AddOrOverrideAes,但不知道究竟在哪里.
这是我目前的解决方案:
add_aes <- function (mapping, ...) {
new_aes <- structure(append(mapping, as.list(match.call()[-(1:2)])), class = "uneval")
rename_aes(new_aes)
}
environment(add_aes) <- asNamespace("ggplot2")
ggplot(df, add_aes(mapping, colour=col)) + geom_point(size=10)
Run Code Online (Sandbox Code Playgroud)
它适用于添加,但不适用于覆盖(不检查此aes是否已存在,等等).我重新发明轮子了吗?
这是GGally ggpairs定制的动机,请看这个问题.
编辑:
工作流程如下:将现有mapping参数作为参数,在适当位置进行修改并进一步传递给另一个函数.我无法修改"最终"ggplot调用.
我最喜欢的探索性分析工具之一是pairs(),在有限数量的离散值的情况下,它会因为点完全对齐而下降.考虑以下:
y <- t(rmultinom(n=1000,size=4,prob=rep(.25,4)))
pairs(y)
Run Code Online (Sandbox Code Playgroud)
它并没有真正给出良好的相关性.会有另一种情节风格吗?
我看到这些帖子 GGally :: ggpairs绘图没有网格线时绘制相关系数 使用ggpairs来创建这个图
阅读后,我能够实现这个黑客https://github.com/tonytonov/ggally/blob/master/R/gg-plots.r,我的情节看起来像这样
我认为这是一个很好的结果,但我无法改变颜色.
MWE就是这个
library(ggally)
# load the hack
source("ggally_mod.R")
# I saved https://github.com/tonytonov/ggally/blob/master/R/gg-plots.r as "ggally_mod.R"
assignInNamespace("ggally_cor", ggally_cor, "GGally")
ggpairs(swiss)
Run Code Online (Sandbox Code Playgroud)
现在我想跑
ggpairs(swiss,
lower=list(continuous="smooth", wrap=c(colour="blue")),
diag=list(continuous="bar", wrap=c(colour="blue")))
Run Code Online (Sandbox Code Playgroud)
但颜色保持不变.有没有办法改变颜色,因为params不再工作了?
我的问题是双重的;
我有一个默认的ggpairs图,upper = list(continuous = cor)我想通过相关值为图块着色(就像ggcorr所做的那样).
我有这个: 
我想上面的图的相关值是这样的: 
library(GGally)
sample_df <- data.frame(replicate(7,sample(0:5000,100)))
colnames(sample_df) <- c("KUM", "MHP", "WEB", "OSH", "JAC", "WSW", "gaugings")
ggpairs(sample_df, lower = list(continuous = "smooth"))
ggcorr(sample_df, label = TRUE, label_round = 2)
Run Code Online (Sandbox Code Playgroud)
我有一个简单的尝试使用,upper = list(continuous = wrap(ggcorr)但没有任何运气,并且,鉴于这两个功能返回情节调用,我不认为这是正确的道路?
我知道我可以在ggplot中构建它(例如Sandy Muspratt的解决方案)但是鉴于GGally包已经具有我正在寻找的功能,我想我可能会忽略一些东西.
更广泛地说,我想知道我们如何或者如果能够调用相关值?一个更简单的选项可能是为标签而不是瓷砖着色(即这个问题使用颜色而不是尺寸),但我需要一个变量来分配颜色......
能够调用相关值以在其他图中使用会很方便,但我想我可以自己重新计算它们.
谢谢!
我有两个因子和两个连续变量,我用它来创建一个使用 ggplot2 的双向面图。然而,并非我的所有因子组合都有数据,所以我最终得到了虚拟方面。这是一些生成等效输出的虚拟代码:
library(ggplot2)
dummy<-data.frame(x=rnorm(60),y=rnorm(60),
col=rep(c("A","B","C","B","C","C"),each=10),
row=rep(c("a","a","a","b","b","c"),each=10))
ggplot(data=dummy,aes(x=x,y=y))+
geom_point()+
facet_grid(row~col)
Run Code Online (Sandbox Code Playgroud)
这产生了这个数字
有没有办法删除不绘制任何数据的方面?并且,理想情况下,将 x 和 y 轴标签向上或向右移动到其余图?如这个 GIMPed 版本所示
我已经在这里和其他地方搜索过,除非我的搜索词不够好,否则我在任何地方都找不到相同的问题。类似的问题通常是未使用的因子水平,但这里没有未使用的因子水平,只是因子水平组合。所以facet_grid(drop=TRUE)或ggplot(data=droplevel(dummy))在这里没有帮助。将这些因素组合成一个单一的因素并删除新因素的未使用级别只能产生一维面网格,这不是我想要的。
注意:我的实际数据有第三个因子水平,我用不同的点颜色表示。因此,允许我保留图例的单图解决方案将是理想的。