我有两种格式的死亡数据,一种是从人类死亡率数据库中获取的列表形式,其中包括男性,女性和综合数据。另一种格式分为男性和女性矩阵,只有年龄,年份和每个矩阵的死亡率。
第一种格式是
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(.)
有谁知道制作热图的更好方法或我在这里做错了什么?
答案 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
答案 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.raw
和max.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
留空或提供单个值,您不应该遇到此问题。