R — извлечение (p) цветов тепловой карты для использования в заливке полигонов.

Я создал тепловую карту в R размером n * k, можно ли извлечь отдельные цвета, используемые для i-го элемента?

Например, n=3 (столбцы) и k=50 (строки), n — произвольный уровень серьезности, а k — округ в Великобритании.

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

Спасибо, Алан


person Al OLoughlin    schedule 07.01.2015    source источник
comment
Вы можете указать собственные цвета для тепловой карты, которую, в свою очередь, вы можете использовать для окрашивания чего-либо еще.   -  person Roman Luštrik    schedule 07.01.2015
comment
Я думаю, он заинтересован в отображении точных оттенков цветов на карте полигонов. Это правильно?   -  person lamecicle    schedule 07.01.2015


Ответы (1)


Чтобы понять, как это работает, мне пришлось заглянуть в код pheatmap. Давайте сначала создадим матрицу:

A <- matrix(1:10, 2, 5)

Палитра по умолчанию определяется как

pal <- colorRampPalette(rev(RColorBrewer::brewer.pal(n = 7, name = "RdYlBu")))(100)

Затем идея состоит в том, чтобы определить значения разрыва и назначить цвет каждому из интервалов, определяемых разрывами:

bks <- pheatmap:::generate_breaks(A, length(pal), center = F)
A2 <- pheatmap:::scale_colours(A, col=pal, breaks=bks)

Матрица A2 содержит цвета, связанные с каждой ячейкой A:

A2
#          [,1]      [,2]      [,3]      [,4]      [,5]     
# [1,] "#4575B4" "#ABD0E4" "#F4FBD2" "#FEDF8F" "#EF6D48"
# [2,] "#77A6CE" "#E0F3F7" "#FEF4AF" "#FCA86B" "#D73027"

Наконец, мы можем представить A цветами, определенными в A2, сначала с помощью pheatmap, а также с image:

pheatmap(t(A[,5:1]),cluster_rows = F, cluster_cols = F)

С картой памяти

image(A, col=A2)

С изображением

Ссылка: Кольде, Р. (2013). Тепловая карта: красивые тепловые карты.

person Vincent Guillemot    schedule 07.01.2015
comment
Если вы изменили A <- matrix(rnorm(10), 2, 5), похоже, это не работает. Можете ли вы объяснить, почему? Это из-за размера значений? - person lamecicle; 07.01.2015
comment
Можешь попробовать image(matrix(1:10,2,5), col=A2)? Я думаю, что image сбит с толку, если A содержит случайные значения. - person Vincent Guillemot; 07.01.2015
comment
Я также попытался заполнить A случайными значениями, и я получил в A2 правильные цвета, соответствующие pheatmap. Я проверил этот сайт. - person Vincent Guillemot; 07.01.2015
comment
Спасибо @Vincent, сработало отлично. Когда у меня был набор данных A2, мне было легко перемещаться по районам, используя i-й элемент содержимого A2 в качестве заполнения моего многоугольника. Ваше здоровье. :) - person Al OLoughlin; 07.01.2015