如何制作基因本体术语热图

问题描述 投票:0回答:1

我正在尝试使用两种基因型(“rsh3”和“iron”)差异表达基因的基因本体的 -log(FDR) 制作热图。在这两列中,“rsh3”和“iron”被写入 GO 项的 -log(FDR)。

我不明白是我写错了代码还是我在数据框中错误地显示了我的数据。

以防万一我不清楚,这就是我的数据框的样子:

enter image description here

我尝试了这段代码:

library(ggplot2)

heat <- read_excel("directory/heat_final.xlsx")

heat_matrix <- as.matrix(heat)

ggplot(heat, aes(x = factor(c("rsh3", "iron")), y = GO_term)) + 
  geom_tile()

我收到此错误:

> ggplot(heat, aes(x = factor(c("rsh3", "iron")), y = GO_term)) + 
+   geom_tile()
Error in `geom_tile()`:
! Problem while computing aesthetics.
ℹ Error occurred in the 1st layer.
Caused by error in `check_aesthetics()`:
! Aesthetics must be either length 1 or the same as the data (288)
✖ Fix the following mappings: `x`
Run `rlang::last_trace()` to see where the error occurred.

我实际上正在尝试获取类似于本文图 3 的热图:

https://www.tandfonline.com/doi/full/10.1080/21580103.2020.1801524

r heatmap
1个回答
0
投票

您的主要问题是,在

ggplot(aes())
中,
x
应该是包含基因型的列名称,而不是包含列名称的因子。

旁注是

ggplot()
期望的是 data.frame 中的数据,而不是矩阵,因此您的转换充其量是无用的(将立即恢复),或者可能会使事情变得更糟。

因此,您需要的是一个带有

GO_term
列(可以映射到
y
)和
genotype
列(可以映射到
x
)的 data.frame。当然,您可以映射到
fill
颜色的列,我们称之为
log_FDR

这意味着您需要获取与基因型相对应的列,并将它们折叠为单个列,以使您的数据整洁,例如与

pivot_longer()

因此使用虚拟数据来说明,这是一个可重现的示例:

library(tidyverse)

# dummy data
heat <- tribble(~GO_term, ~rsh3, ~iron, ~mutant2,
                "GO1", 1.81, 1.86, 2.5,
                "GO2", 3.2, 0, 1)

heat |>
  select(GO_term, rsh3, iron) |>
  pivot_longer(-GO_term,
               names_to = "genotype",
               values_to = "log_FDR") |>
  ggplot(aes(x = genotype, y = GO_term, fill = log_FDR)) + 
  geom_tile()
© www.soinside.com 2019 - 2024. All rights reserved.