【问题标题】:How to write a function to loop through variables and plot using ggplot如何编写一个函数来循环变量并使用ggplot绘图
【发布时间】:2020-04-06 10:47:57
【问题描述】:

我在弄清楚如何遍历数据框中的变量并使用 ggplot 绘制它们时遇到问题。 我的数据示例如下:

head(myData,2)

          x1        x2      yhat        x11        x3    yhat1        x12
1 -0.8523122 -2.737223 -6.562228 -0.8523122 -1.450288 0.464739 -0.8523122
2 -0.5649950 -2.737223 -6.562228 -0.5649950 -1.450288 0.464739 -0.5649950
         x4     yhat2       x21       x31      yhat3
1 -1.267759 -4.624147 -2.737223 -1.450288 -0.6858007 
2 -1.267759 -4.624147 -2.267001 -1.450288 -0.6858007 

我要做的是使用geom_raster 绘制每对变量(即[x1,x2]、[x11,x3] 等)并使用相应的yhat 作为fill 值.

例如,如果我要手动绘制所有内容,我会执行以下操作:

p<-ggplot(myData, aes(x = x1, y = x2)) + geom_raster(aes(fill = yhat))
pp<-ggplot(myData, aes(x = x11, y = x3)) + geom_raster(aes(fill = yhat1))
ppp<-ggplot(myData, aes(x = x12, y = x4)) + geom_raster(aes(fill = yhat2))
pppp<-ggplot(myData, aes(x = x21, y = x31)) + geom_raster(aes(fill = yhat3))

grid.arrange(p, pp, ppp, pppp, ncol = 2)

但我正在尝试编写一个循环遍历数据框并绘制图表的函数。我试图从另一个问题 here 调整代码,但我无法让它为我工作。

关于如何为我的数据实现这一目标的任何建议?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    一种方法是在每 3 列中拆分数据并将代码应用于每个列表。

    library(gridExtra)
    library(tidyverse)
    library(rlang)
    
     temp <- split.default(df, gl(ncol(myData)/3, 3)) %>%
          map(~{
          x <- syms(names(.))
          ggplot(., aes(x = !!x[[1]], y = !!x[[2]])) + geom_raster(aes(fill = !!x[[3]]))
         })
    grid.arrange(grobs = temp)  
    

    数据

    将此应用于 2 行的有限数据。

    myData <- structure(list(x1 = c(-0.8523122, -0.564995), x2 = c(-2.737223, 
    -2.737223), yhat = c(-6.562228, -6.562228), x11 = c(-0.8523122, 
    -0.564995), x3 = c(-1.450288, -1.450288), yhat1 = c(0.464739, 
    0.464739), x12 = c(-0.8523122, -0.564995), x4 = c(-1.267759, 
    -1.267759), yhat2 = c(-4.624147, -4.624147), x21 = c(-2.737223, 
    -2.267001), x31 = c(-1.450288, -1.450288), yhat3 = c(-0.6858007, 
    -0.6858007)), class = "data.frame", row.names = c("1", "2"))
    

    【讨论】:

    • 这工作得很好......关于我如何为每个图获得正确的轴标签有什么建议吗?
    • @Electrino 更新了答案。
    • 优秀。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多