使用 ggpairs 创建此图 [英] use ggpairs to create this plot

查看:26
本文介绍了使用 ggpairs 创建此图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 Shiny 应用程序中有一些代码可以生成下面的第一个图.如您所见,字体大小随相关系数的大小而变化.我想用 ggpairs (GGally) 或 ggplot2 制作类似的东西.下面的第二张图片是用以下代码生成的:

图书馆(GGally)ggpairs(df,上 = 列表(参数 = c(大小 = 10)),下=列表(连续=平滑",参数= c(方法=黄土",填充=蓝色")))

如您所见,相关字体的大小可以使用 size 进行调整,但是当我设置大小向量时,仅使用第一个值.我还想删除Corr:"并添加一个重要指标.使用颜色作为相关系数的符号也会很好.在下层,methodfillsmooth 没有关联.关于如何获得第二个情节以捕捉第一个情节的更多特征的任何建议都会很棒.

原答案

复杂绘图的定制并不总是可以通过参数列表进行的.这是很自然的:要记住的参数太多了.所以唯一可靠的选择是修改源.当项目托管在github上时,这尤其令人愉快.

这是一个简单的修改开始,在 分叉回购.更新代码并生成下图的最简单方法是将函数 ggally_cor 复制并粘贴到您的全局环境中,然后在 GGally 命名空间中覆盖相同的函数:

# ggally_cor <- <...>assignInNamespace("ggally_cor", ggally_cor, "GGally")ggpairs(df[, 1:2],上 = 列表(参数 = c(大小 = 10)),下 = 列表(连续 = 平滑"))

我删除了文本标签并添加了重要性指标.但是,修改颜色和大小并不是那么容易,因为这些是更早映射的.我仍在考虑它,但您明白了,可以继续进行进一步的自定义.

我已经更新了代码,请查看我的最新提交.现在它将标签的大小映射到相关性的绝对值.如果你想要不同的颜色,你可以做类似的事情,虽然我认为这可能不是一个好主意.

I have some code in a Shiny app that produces the first plot below. As you can see the font size varies with the size of the correlation coefficient. I would like to produce something similar with ggpairs (GGally) or ggplot2. The second image below was produced with the following code:

library(GGally)
ggpairs(df, 
  upper = list(params = c(size = 10)),
  lower = list(continuous = "smooth", params = c(method = "loess", fill = "blue"))
)

As you can see the size of the correlation font is adjustable using size but when I set a vector of sizes only the first value is used. I would also like to remove 'Corr:' and add an indicator of significance. Using colors for the sign of the correlation coefficient would also be nice. In lower, method and fill are not linked to smooth. Any suggestions on how to get the 2nd plot to capture more features of the 1st would be great.

Anscombe's data:

df <- structure(list(y1 = c(8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 
4.26, 10.84, 4.82, 5.68), x1 = c(10L, 8L, 13L, 9L, 11L, 14L, 
6L, 4L, 12L, 7L, 5L), y2 = c(9.14, 8.14, 8.74, 8.77, 9.26, 8.1, 
6.13, 3.1, 9.13, 7.26, 4.74), x2 = c(10L, 8L, 13L, 9L, 11L, 14L, 
6L, 4L, 12L, 7L, 5L), y3 = c(7.46, 6.77, 12.74, 7.11, 7.81, 8.84, 
6.08, 5.39, 8.15, 6.42, 5.73), x3 = c(10L, 8L, 13L, 9L, 11L, 
14L, 6L, 4L, 12L, 7L, 5L)), .Names = c("y1", "x1", "y2", "x2", 
"y3", "x3"), class = "data.frame", row.names = c(NA, -11L))

# based mostly on http://gallery.r-enthusiasts.com/RGraphGallery.php?graph=137
panel.plot <- function(x, y) {
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(0, 1, 0, 1))
    ct <- cor.test(x,y)
    sig <- symnum(ct$p.value, corr = FALSE, na = FALSE,
                  cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1),
                  symbols = c("***", "**", "*", ".", " "))
    r <- ct$estimate
    rt <- format(r, digits=2)[1]
    cex <- 0.5/strwidth(rt)

    text(.5, .5, rt, cex=cex * abs(r))
    text(.8, .8, sig, cex=cex, col='blue')
}
panel.smooth <- function (x, y) {
      points(x, y)
      abline(lm(y~x), col="red")
      lines(stats::lowess(y~x), col="blue")
}
pairs(df, lower.panel=panel.smooth, upper.panel=panel.plot)

解决方案

Edit for GGally 1.0.1

Since params is now deprecated, use wrap like so:

ggpairs(df[, 1:2], 
        upper = list(continuous = wrap("cor", size = 10)), 
        lower = list(continuous = "smooth"))

Original answer

Customization of complicated plots is not always available through parameter list. That's natural: there are way too many parameters to keep in mind. So the only reliable option is to modify the source. This is especially pleasant when the project is hosted on github.

Here's a simple modification to start with, made in a forked repo. The easiest way to update the code and produce the plot below is to copy and paste the function ggally_cor to your global environment, then override the same function in the GGally namespace:

# ggally_cor <- <...>
assignInNamespace("ggally_cor", ggally_cor, "GGally")
ggpairs(df[, 1:2], 
        upper = list(params = c(size = 10)), 
        lower = list(continuous = "smooth"))

I removed the text label and added significance indicators. Modifying colour and size is not that easy, though, since these are mapped earlier. I'm still thinking on it, but you get the idea and may move on with your further customizations.

Edit: I've updated the code, see my latest commit. It now maps size of the label to the absolute value of the correlation. You can do similar thing if you want different colour, though I think this is probably a not very good idea.

这篇关于使用 ggpairs 创建此图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆