首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用plot_grid将地块信息存储在R数据帧中

使用plot_grid将地块信息存储在R数据帧中
EN

Stack Overflow用户
提问于 2021-02-08 04:12:52
回答 1查看 122关注 0票数 1

我生成一系列存储在矩阵中的图,作为for循环的一部分,类似于下面的MWE。这个矩阵还存储了另外两列信息(本例中为Colour和information )。然后,我希望能够创建一个地块网格,在那里我根据相应的颜色和动物来识别地块。

我试着创建一个数据框架,然后使用行名来调用我需要的绘图,但是Cannot convert object of class list into a grob.有一个常见的错误。如果我直接从矩阵调用,这是有效的-然而,我希望有一种方法不必这样做,以防数据顺序在输入文件中发生变化。可以直接从数据框架中工作吗?我见过类似的例子,但不能适用于我的案例。我想坚持奶牛的情节,并尽可能少地改变在数据生成阶段。

MWE

代码语言:javascript
复制
library(cowplot)
p <- vector('list', 15)
p <-
  matrix(
    p,
    nrow = 5,
    ncol = 3
  )

myColours = c("Yellow", "Red", "Blue", "Green", "Orange")
myAnimals = c("Kangaroo",  "Emu", "Echidna", "Platypus", "Cassowary")

x = seq(1,10)    
it = 1

for (i in seq(0,4)){ # generate example data and plots
  y = x^i
  t = runif(5)
  
  df <- data.frame("X" = x, "Y" = y, "T" = t)
  
  theanimal = myAnimals[i+1]
  thecolour = myColours[i+1]
        
  p[[it,1]] = thecolour
  p[[it,2]] = theanimal
          
  p[[it,3]] = ggplot(data = df, mapping = aes(x = X, y = Y)) +
    geom_point(aes(color = T)) +
    ggtitle(paste(thecolour, theanimal, sep = " "))
  
  it = it+ 1
}

# turn into df
pltdf<- as.data.frame(p)
colnames(pltdf) <- c("Colour", "Animal", "plot")
rownames(pltdf) <- do.call(paste, c(pltdf[c("Colour", "Animal")], sep="-"))

pltdf[[1,3]] # this is what I expect for a single plot

plot1 =  vector('list', 4)
plot1 <-
  matrix(
    plot1,
    nrow = 2,
    ncol = 2
  )

plot1[[1,1]] = pltdf["Red-Emu", "plot"]. # also tried with just plot[[1]] = etc.
plot1[[1,2]] = pltdf["Blue-Echidna", "plot"]

plot1[[2,1]] = pltdf["Orange-Cassowary", "plot"]
plot1[[2,2]] = pltdf["Green-Platypus", "plot"]


plot_grid(plotlist = t(plot1), ncol = 2)
plot_grid(plotlist = list(plot1), ncol = 2) # suggested solution on a dif problem

plot2 =  vector('list', 4) # what I want plots to look like in the end 
plot2[[1]] = p[[1,3]]
plot2[[2]] = p[[4,3]]
plot2[[3]] = p[[2, 3]]
plot2[[4]] = p[[5, 3]]

plot_grid(plotlist = t(plot2), ncol = 2)
EN

回答 1

Stack Overflow用户

发布于 2021-02-08 05:08:17

您可以指定希望绘图在其中的顺序,并相应地对数据进行子集,这可以在plot_grid中使用。

代码语言:javascript
复制
library(cowplot)

order <- c("Red-Emu", "Blue-Echidna", "Orange-Cassowary", "Green-Platypus")
plot_grid(plotlist = pltdf[order, 'plot'], ncol = 2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66095830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档