亲爱的StackOverflow社区,
我有一个非常大的数据集,其摘录如下所示:
AC010327.1 AC010368.1 AC010525.2
TGYR 0 0 0.984
BHT 0.1 0 0
THY_RHE 0 0.0002 0
FJU_WJNKO 0 0 0
PAED_DISE 0.342 0 0
DID PID 0 0.3821 0
每列是一个基因,长度为30,000列。总共有9行,每个代码用于疾病类型。这些数字代表统计检验结果,该结果在该疾病针对基因类型进行的0-1之间。
我想以易于查看的形式呈现这一大量数据,并认为热图最适合。
使用:
x <- data
x <-as.data.frame(x)
heatmap(x, scale - 'none')
给我一个非常丑陋的数据块。
我一直在尝试使用geom_tile ggplot2,但不断收到错误消息。我有点不确定&#34; aes&#34;这个功能就像我没有命名我的行或名字一样。
如果需要,我可以提供更多信息,但感谢您提供一些指导意见?
非常感谢
更新13/2/18
Using solution below, is there a way of weighting it in preference to results greater than 0?
答案 0 :(得分:1)
我们可以将数据框格从宽格式转换为长格式,然后使用geom_tile
。
library(tidyverse)
dat2 <- dat %>%
rownames_to_column(var = "Disease") %>%
gather(Gene, Value, -Disease)
ggplot(dat2, aes(x = Gene, y = Disease, fill = Value)) +
geom_tile() +
scale_fill_viridis_c()
数据强>
dat <- read.table(text = " 'AC010327.1' 'AC010368.1' 'AC010525.2'
TGYR 0 0 0.984
BHT 0.1 0 0
THY_RHE 0 0.0002 0
FJU_WJNKO 0 0 0
PAED_DISE 0.342 0 0
'DID PID' 0 0.3821 0",
header = TRUE, stringsAsFactors = FALSE)
答案 1 :(得分:0)
当您观察协方差(不同变量之间的差异)时,并假设检查/测试使用了两个像您一样的分类变量,对于相对中等大小的数据集,最好使用geom_tile。
但是,当您的数据集庞大而无法在geom_tile中看到时,最好使用d3heatmap
我可以向您展示一个包含大型数据集的示例,您也可以尝试该示例,它与您的数据集相似。
library(d3heatmap)
url <- "http://datasets.flowingdata.com/ppg2008.csv"
nba_players <- read.csv(url, row.names = 1)
d3heatmap(nba_players, scale = "column")
结果可以在Web浏览器中启动并可以交互播放 在此网站上可以看到示例结果:Output
Check this site for more information
注意: 1。该数据集应为数字数据集,d3热图将不接受任何负值或任何字符 2.为避免出现此问题,您可以为每一行或每一行分配一个百分比份额