Как управлять тепловой картой с помощью решетки и графика уровня? - PullRequest
2 голосов
/ 02 июля 2011

Этим утром я начал находить решение для создания тепловой карты из таблицы парных значений, которые у меня здесь есть.Я обнаружил, что пакет решетки предлагает levelplots, что похоже на то, что я был после.Когда мне удалось привести мои данные в правильный формат, я играл с levelplot.Цветовая тема по умолчанию не дает того, что мне нужно, и я нашел решение в оттенках серого в Интернете.Тем не менее, управление большей частью сюжета пока выходит за рамки моих возможностей.Я не очень часто использую R и пока не очень знаком со многими более глубокими структурами данных.

Моя текущая команда:

library("lattice")
matrix <- as.matrix(rev(read.table("inputfile",header=T,row.names=c(<list of ten names>))))
levelplot(matrix,col.regions = grey(100:0/100))

Это вывод матрицы dput:

structure(c("937.5", "652.5", "1066.5", "787.5", "229.5", "115.5", 
"787.5", "763.5", "415.5", "N/A", "1483.5", "1360.5", "1858.5", 
"1309.5", "478.5", "322.5", "1375.5", "1588.5", "N/A", "1759.5", 
"643.5", "904.5", "1189.5", "712.5", "256.5", "154.5", "829.5", 
"N/A", "403.5", "1231.5", "808.5", "1096.5", "1195.5", "913.5", 
"292.5", "187.5", "N/A", "1147.5", "478.5", "1192.5", "6712.5", 
"6373.5", "6517.5", "6058.5", "4555.5", "N/A", "6394.5", "7357.5", 
"6214.5", "6835.5", "3412.5", "3991.5", "3814.5", "3793.5", "N/A", 
"1327.5", "3994.5", "3808.5", "3307.5", "4618.5", "1261.5", "1261.5", 
"1162.5", "N/A", "310.5", "220.5", "1195.5", "1639.5", "574.5", 
"1732.5", "871.5", "847.5", "N/A", "610.5", "262.5", "172.5", 
"943.5", "985.5", "448.5", "1525.5", "940.5", "N/A", "1105.5", 
"829.5", "292.5", "160.5", "961.5", "1198.5", "538.5", "1495.5", 
"N/A", "832.5", "1009.5", "880.5", "280.5", "196.5", "952.5", 
"1357.5", "550.5", "1456.5"), .Dim = c(10L, 10L), .Dimnames = list(
    c("NA_Pacific", "NA_Central", "NA_Atlantic", "Greenland", 
    "EU_NW", "EU_WM", "EU_BS.EM", "Asia_SW", "Asia_Central", 
    "Asia_East"), c("Asia_East", "Asia_Central", "Asia_SW", "EU_BS.EM", 
    "EU_WM", "EU_NW", "Greenland", "NA_Atlantic", "NA_Central", 
    "NA_Pacific")))
  1. Это создает почти то, чего я хотел бы достичь.Но серый уродлив.Как я могу изменить его, скажем, на синий?Замена серого на синий не работает ...

  2. Далее, он печатает метки на галочки, как я указал их в моей таблице ввода.Это работает для оси Y, но не для оси X.Как я могу утилизировать отметки по оси Y, чтобы напечатать их на отметки по оси X (повернутые на 90 градусов)?

  3. Наконец, есть небольшой пробел вдольось х (сверху и снизу).Хотя это не является реальной проблемой, было бы неплохо ее устранить.

Я надеюсь, что хотя бы некоторые из вопросов могут быть решены.Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 июля 2011

Я немного повозился и обнаружил, что метки тиков и определения матриц теперь работают довольно хорошо, так как мне удалось включить row.names в матрицу.Однако способ использования col.regions в функции levelplot был откровением!Теперь я использую следующее, чтобы получить цветовую рампу в levelplot:

ramp <- colorRamp(c("white", "blue"))

Это создаст рампу между белым и синим, но возможен любой другой цвет.И направление рампы определяется одновременно.Здесь низкие значения белого, высокие значения синего.В levelplot я использую эту рампу с col.regions следующим образом:

col.regions=rgb(ramp(seq(0, 1, length = 1000)), max = 255)

Где длина должна быть установлена ​​на любое большое значение, чтобы оно превышало количество различных значений в матрице.В противном случае цвета будут переработаны в тепловой карте.Настройка max=255 определяет весь диапазон между двумя цветами в рампе.Установка более низких значений не будет работать, потому что это самый низкий приемлемый способ, которым я его использую.Установка его выше сместит «темноту» рампы вверх, что также может быть неплохо в некоторых случаях.

Возможно, это не очень профессиональное решение, но оно хорошо работает для моего случая, и я могу прекрасно управлять своей цветовой шкалой.Спасибо за указатели!

0 голосов
/ 02 июля 2011

В тот момент, когда matrix объект является матрицей символов, и я ожидаю, что график уровня будет работать лучше с числовым, поэтому я сделал:

matrix2 <-apply(matrix, 2, as.numeric)

1) Вы должны понимать, что grey - это функция. Другие цветовые функции, такие как grey, включают rgb и hsv. Возможно ... , col.regions=rgb(100) ) ... при условии, что у вас есть 101 различное значение x. РЕДАКТИРОВАТЬ: Это было неправильно. функция rgb учитывает три векторных аргумента: Попробуйте это:

col.regions = c(rgb(50:0/50, 0, 0),rgb(0,0:50/50,0) )  
     # ugly result but shows how to use two color ranges

2) Метки тиковых осей управляются аргументом list для параметра scale. Что-то вроде ... , scales=list(x=list(labels=<label=vector>, at=<tick-positions>) ). Это будет at, отличный от того, который использовался для установки z-брейков.

3) Я предполагаю, что вы создали пробел вдоль оси x из-за некоторого несоответствия размеров или дополнительных значений. Уровень по умолчанию не создает пробелы. Нужны эти детали вашего объекта. Оказывается, что пробел присутствует, когда dimnames являются «символами», но не существует, когда они имеют значение NULL, поэтому попробуйте это:

rownames(matrix2) <- NULL
colnames(matrix2) <- NULL  # don't throw away matrix, we need its dimnames
levelplot(matrix2,col.regions = c(rgb(50:0/50, 0, 0),rgb(0,0:50/50,0) ), region=TRUE, 
    scales=list(x=list(rot=90, at=1:10, labels=rownames(matrix)), y=list( at=1:10, 
    labels=rownames(matrix)) ))
...