从死亡数据创建热图?

时间:2015-11-04 15:30:42

标签: r heatmap

我有两种格式的死亡数据,一种是从人类死亡率数据库中获取的列表形式,其中包括男性,女性和综合数据。另一种格式分为男性和女性矩阵,只有年龄,年份和每个矩阵的死亡率。

第一种格式是

Year Age   Female     Male    Total  
1961  99     0.3       0.4     0.3  
1961  98     0.4       0.5     0.4  

等。

我分离的第二种格式是以下列形式获取数据:

 Age 1961  1962  1963 .....  
  0  0.02  0.02  0.02 ...  
  1  0.002 0.002 0.002....  

等。

我希望能够绘制热图,以便我可以查看群组效果等。

我尝试过通过在线搜索找到的各种方法,但这些方法不适用于我的数据呈现方式。我生产的热图完全是红色的。有人可以帮忙吗?

我试过这个:

rnames <- France[,1]   #assign labels in column 1 to "rnames"
mat_data <- data.matrix(France[,2:ncol(France)])
rownames(mat_data) <- rnames #assign row names
col_breaks = c(seq(-1,0,length=100),  # for red
  seq(0,0.8,length=100),              # for yellow
  seq(0.8,1,length=100))              # for green
my_palette <- colorRampPalette(c("red", "yellow", "green"))(n = 299)
png("location",    # create PNG for the heat map        
  width = 5*300,        # 5 x 300 pixels
  height = 5*300,
  res = 300,            # 300 pixels per inch
  pointsize = 8)        # smaller font size

heatmap.2(mat_data,
cellnote=mat_data,
main="Correlation",
notecol="black",
trace="none",
margins =c(12,9),
col=my_palette,
breaks=col_breaks,
dendrogram="row",
Colv="NA")
dev.off()

创建一个稳定的红色热图,其中年份列在底部,然后是年份旁边的单词Age,然后是沿y轴列出的实际年龄。它还给了我一个错误代码:

Error in seq.default(min.raw, max.raw, by = min(diff(breaks)/4)) : 
invalid (to - from)/by in seq(.)

有谁知道制作热图的更好方法或我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

这有什么用?我根据你的数据看起来是什么,并生成一些数据来匹配。 然后我开始用一年的情节&#39;年在x轴和&#39;年龄&#39;在y轴上和每个点的正方形(geom_tile)。这些方块按照&#39;总数进行着色。它没有像你给出的例子那样有任何多边形,但我认为通过你的真实数据,它可以让你寻找群组效应。

#generate some data ranging from 0 to 0.1
set.seed(1000)
France <- expand.grid(Year=1961:2000,Age=20:98)
France$Female <- runif(nrow(France),0,0.05)
France$Male <- runif(nrow(France),0,0.05)
France$Total <- France$Male + France$Female


library(ggplot2)

p1 <- ggplot(France, aes(x=Year,y=Age,fill=Total)) + 
  geom_tile()+ 
  scale_fill_gradientn(colours=rainbow(10))
p1

enter image description here

答案 1 :(得分:1)

来自source code

z <- seq(min.raw, max.raw, by=min(diff(breaks)/4))

heatmap.2代码在内部调用seq函数并产生您遇到的错误:

Error in seq.default(min.raw, max.raw, by = min(diff(breaks)/4)) : 
    invalid (to - from)/by in seq(.)

min.rawmax.raw是什么?向上滚动一下(第640行),你会看到它们是你传入的breaks arg的最小值和最大值(在这种情况下分别为-1和1)。内部by函数中的seq参数的计算结果为0:

min(diff(breaks)/4)

实际上,如果您尝试使用以下参数构建seq函数,则可以复制此错误:

> seq(-1, 1, by=0)
Error in seq.default(-1, 1, by = 0) : invalid (to - from)/by in seq(.)

这里有两个含义:首先,你发现了一个破坏该代码的角落,这是一个应该在github repository上报告的错误(即,如果这个评估为0,则使用一些预先定义的by参数。其次,你可以使用统一的break参数,或者只是不定义它。它毕竟是一个可选参数。来自文档:

breaks
(optional) Either a numeric vector indicating the splitting points for binning x
into colors, or a integer number of break points to be used, in which case the break
points will be spaced equally between min(x) and max(x).

breaks留空或提供单个值,您不应该遇到此问题。