使用ggplot2为热图准备r中的数据帧

使用ggplot2为热图准备r中的数据帧,r,dataframe,ggplot2,heatmap,R,Dataframe,Ggplot2,Heatmap,目前正在尝试创建一些基因数据的热图。列当前标记为s1、s2、s3等,但我还有一个.txt文件,其中包含每个示例的正确对应标签。我不确定是否需要首先修改csv文件中的基因表达水平,或者是否可以将它们分别传输到我正试图准备的数据框中,最终将其制作成热图。我也不确定数据帧的格式应该是什么。如果有必要的话,我想使用ggplot2来创建热图 以下是我目前的代码: library(ggplot2) library(dplyr) library(magrittr) nci <- read.csv('

目前正在尝试创建一些基因数据的热图。列当前标记为s1、s2、s3等,但我还有一个.txt文件,其中包含每个示例的正确对应标签。我不确定是否需要首先修改csv文件中的基因表达水平,或者是否可以将它们分别传输到我正试图准备的数据框中,最终将其制作成热图。我也不确定数据帧的格式应该是什么。如果有必要的话,我想使用ggplot2来创建热图

以下是我目前的代码:

library(ggplot2)
library(dplyr)
library(magrittr) 

nci <- read.csv('/Users/myname/Desktop/ML Extra Credit/nci.data.csv')
nci.label <-scan(url("https://web.stanford.edu/~hastie/ElemStatLearn/datasets/nci.label",what="")
                 
#Select certain columns (specific years)
mat <- matrix(rexp(200, rate=.1), ncol=20)
rownames(mat) <- paste0('gene',1:nrow(mat))
colnames(mat) <- paste0('sample',1:ncol(mat))
mat[1:5,1:5]

任何帮助都将不胜感激

您需要以“长”格式获取数据帧,以便于打印。这就是所谓的,并构成了使用
ggplot2
准备要打印的数据的基础

这里的总体思路是,您需要一列表示
x
值,一列表示
y
值,一列表示用于平铺颜色的值。有很多方法可以做到这一点(请参见
melt()
pivot\u longer()
…),但我喜欢使用
tidyr::gather()
。因为您使用的是行名,而不是gene的列,所以我首先将其创建为数据集中的列

library(dplyr)
library(tidyr)
library(ggplot2)

set.seed(1234)

# create matrix
mat <- matrix(rexp(200, rate=.1), ncol=20)
rownames(mat) <- paste0('gene',1:nrow(mat))
colnames(mat) <- paste0('sample',1:ncol(mat))
mat[1:5,1:5]

# convert to data.frame and gather
mat <- as.data.frame(mat)
mat$gene <- rownames(mat)
mat <- mat %>% gather(key='sample', value='value', -gene)

当我尝试使用聚集函数时,收到以下错误消息:UseMethod(“聚集”)中出错:没有适用于“聚集”的方法应用于类“list”@Kyle的对象-抱歉,我起初没有看到你发布你有一个矩阵。为了使用
聚集
功能,您需要先将其转换为数据帧。我编辑了答案以反映您的具体情况。实际上,我最终使用melt()将df转换为长格式。现在我的代码稍微简单了一点,只有库、read.csv、head(melt(nci)),然后是ggplot来创建热图,但它告诉我现在找不到对象“值”。你指向的是正确的数据集吗
melt()
应该创建一个名为“
value
”的列,对我来说,它默认为列名
X1
X2
。您可能需要定义数据集的名称,并确保它们与分配给
ggplot
代码中每个美学(
x
y
、和
fill
)的名称完全匹配。@Kyle,我已经回答了您的另一个问题,但这是已经在这里的内容和已经回答的内容的重复。在你的帖子中,你使用了
ggplot(nci)
,它试图绘制“未融化”的数据集。如果要在数据调用中直接使用
melt()
,可以使用
metl(nci)
library(dplyr)
library(tidyr)
library(ggplot2)

set.seed(1234)

# create matrix
mat <- matrix(rexp(200, rate=.1), ncol=20)
rownames(mat) <- paste0('gene',1:nrow(mat))
colnames(mat) <- paste0('sample',1:ncol(mat))
mat[1:5,1:5]

# convert to data.frame and gather
mat <- as.data.frame(mat)
mat$gene <- rownames(mat)
mat <- mat %>% gather(key='sample', value='value', -gene)
ggplot(mat, aes(sample, gene)) + geom_tile(aes(fill=value))