2015-11-04 2 views
1

У меня есть два формата моих данных о смертности, один в форме списка, который вы получаете из базы данных смертности человека, с мужчинами, женщинами и комбинированными данными в столбцах. Другой формат разделяется на мужские и женские матрицы с указанием только возраста, года и коэффициента смертности в каждой матрице.Создание карты тепла из данных о смертности?

Первый формат вдоль линий

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() 

Который создает прочную красную Heatmap с указанного года по дну, а затем слово Возраст рядом с годами, а затем фактические возрасты перечислены вдоль Y-ось. Это также дает мне код ошибки:

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

Кто-нибудь знает лучший способ получения Heatmap или то, что я сделал не так?

+1

Прочтите [ask] и как создать [воспроизводимый пример в R] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) , Это включает (некоторые) данные, предпочтительно вывод вызова в dput и собственный код. – Heroka

+0

@Heroka Я не был уверен, что включить, поскольку весь код, который я пробовал, был действительно длинным и не так сильно удался? – Emma

+0

Нам нужно увидеть хотя бы пример данных и то, что вы пробовали. Если что-то не удается, нам нужно выяснить, где и что такое ошибка. – Tgsmith61591

ответ

1

В любом случае это полезно? Я основывал его на ваших данных и генерировал некоторые данные для сопоставления. Затем я начал с графика с «годом» по оси х и «возрасту» по оси у и квадрату (geom_tile) для каждой точки. Эти квадраты окрашены в соответствии с «общим». У этого нет никаких полигонов, как пример, который вы дали, но я думаю, что с вашими реальными данными он позволит вам искать когортные эффекты.

#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

+0

, поэтому я попробовал запустить код для своих данных, но он говорит: «Ошибка в eval (expr, envir, cover): object 'year' не найден?, это год, исходящий из моих данных? Я попробовал «France $ year» и то же самое по возрасту и сумме, но в нем появляется «Ошибка в существовании (имя, envir = env, mode = mode): отсутствует аргумент« env », без значения по умолчанию», знаете ли вы что это значит? – Emma

+0

Это означает, что я неаккуратно с капитализацией. Исправит (я использовал имена переменных без капиталов). – Heroka

+0

ой, но это именно то, чего я хочу! – Emma

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), и вы увидите, что они являются min и max аргумента breaks, в котором вы проходили (что в данном случае равно -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 пустым или обеспечивая одно значение, вы не должны столкнуться с этой проблемой.

+1

Очень впечатляющий исходный код. – Heroka

+0

Большое спасибо, когда вы говорите, что оставляете 'breaks' пустым, что вы имеете в виду? установить «breaks = 0», оставить его пустым или удалить? Или что-то совсем? – Emma

+0

Просто удалите 'breaks = col_breaks' из вызова целиком. Поэтому было бы: 'heatmap.2 (mat_data, cellnote = mat_data, главное = "Корреляция", notecol = "черный", след = "нет", наценки = с (12,9), Col = my_palette, dendrogram = "row", Colv = "NA") 'Попробуйте и посмотрите, что произойдет. – Tgsmith61591

Смежные вопросы