首页 > 解决方案 > 如何绘制两个文件中的数据?

问题描述

我正在尝试绘制 5 个第一个值和 5 个最后一个数据。我有两个文件 A 和 B。

A 是顺序,这就是为什么我需要 5 和最后的 5。我想绘制另一个文件 B 中每个复制的强度。

如果在 B 中找到我在 A 中的名字以绘制所有值...

文件 B 与文件 A(以及更多)具有相同的行名,这就是为什么我想要 A 和 B 之间的共同行名,然后如果它们相等,我想从我的文件 B 中绘制每个复制(列)的所有值。所以最后,我将有 5 个地块用于 5first 和 5 个地块用于 5last。

我已经尝试过这样的事情,但就像我说的那样,我对 R 编程不是很好。

刚开始,我想看看我是否可以在两个文件之间建立链接。这行不通。

5fisrt <- A[1:5,]
5last <- A[(nrow(RT)-5+1):nrow(A), ]

i <- 0
for (i in 5fisrt)
{
  if row.names(5fisrt[i]) == row.names(B[i])
  plot <- boxplot(B,aes(B[i]))
  print (plot)
}

我会在 5last 再做一次。

我该如何解决这个问题?

标签: rggplot2plot

解决方案


如果我理解,您想为 B 中的每一行制作一个条形图,如果该行的名称与 A 的前 5 行或后 5 行之一的名称相同。

如果您想在一个图形中显示所有 10 个图,则可以使用 facet_grid:

library(tidyverse)
n <- nrow(A)

C <- B[row.names(A[c(1:5,(n-4):n),]),]

C %>% 
  mutate(rowName = row_number()) %>% 
  gather(key = 'replicates', value = 'intensity', -rowName) %>% 
  ggplot(
    aes(
      x = replicates,
      y = intensity
    )
  ) +
  geom_col() +
  facet_grid(rowName~.)

请注意,我的回答假设 A 中至少有 10 行。代码的第二行子集 B 如您所愿,并将其分配给新对象 C,只是为了代码清晰。我本可以在不定义 C 的情况下将 B 的子集直接传送到 mutate 中。

更新:

由于您不想使用 facet,您可以尝试以下方法之一:

library(tidyverse)
n <- nrow(A)

C <- B[row.names(A[c(1:5,(n-4):n),]),]

D <- C %>% 
  mutate(rowName = row_number()) %>% 
  gather(key = 'replicates', value = 'intensity', -rowName)

# Plot to the RStudio viewer
for(i in 1:10){
  p <- 
    D %>% 
    filter(rowName == i) %>% 
    ggplot(
      aes(
        x = replicates,
        y = intensity
      )
    ) +
    geom_col()

    print(p)
}

# Save the plots to files
for(i in 1:10){
  p <- 
    D %>% 
    filter(rowName == i) %>% 
    ggplot(
      aes(
        x = replicates,
        y = intensity
      )
    ) +
    geom_col()

  ggsave(paste0("myPlot",i,".png"), plot = p)
}

推荐阅读