Генерация тепловой карты из диапазона данных в R - PullRequest
0 голосов
/ 08 мая 2018

Я сгенерировал список (названный "trans") фреймов данных в R. Каждый список имеет 3 столбца: наклон, начало и остановка.Вот небольшая часть данных:

> trans
$a
          slope       start       stop
1  0.0006718865 -0.85576923 -1.0000000
2 -0.0005769719 -0.65384615 -0.8557692
3  0.0000698207 -0.50000000 -0.6538462
4 -0.0001124370 -0.26923077 -0.5000000
5  0.0005659248 -0.03846154 -0.2692308

$b    
          slope       start       stop
1  5.689229e-04 -0.85148515 -1.0000000
2 -1.613771e-04 -0.23762376 -0.8514851
3  9.879804e-05 -0.03960396 -0.2376238

В каждой строке «уклон» представляет интересующее значение, тогда как «старт» и «стоп» указывают диапазон, для которого существует этот уклон.Значения «start» и «stop» для всех фреймов данных варьируются от -0,04 до -1.Мои кадры данных имеют разное количество строк.

Я хотел бы построить, предпочтительно в виде тепловой карты, разные наклоны во всем диапазоне -0,04: -1, чтобы каждая строка тепловой карты представляла каждый информационный кадр из моегосписок.Есть ли элегантный способ сделать это с текущим набором информации, которую я сгенерировал?Единственное решение, которое я могу придумать, состоит в том, чтобы преобразовать каждый фрейм данных в 2 столбца, где каждое значение в каждом диапазоне начала-конца (до 10 ^ 10 десятичных разрядов!) Указано в одном столбце, а наклон в этом диапазоне указан вдругой столбец.

Я очень хорошо знаком с heatmap.2 из пакета gplots, но мне интересно, будет ли такой график, который мне придется делать с нуля.

1 Ответ

0 голосов
/ 08 мая 2018

Я догадываюсь, к чему вы стремитесь, но я думаю, что вы можете достичь этого с ggplot2::geom_rect().

a <- read.table(textConnection("
slope       start       stop
1  0.0006718865 -0.85576923 -1.0000000
2 -0.0005769719 -0.65384615 -0.8557692
3  0.0000698207 -0.50000000 -0.6538462
4 -0.0001124370 -0.26923077 -0.5000000
5  0.0005659248 -0.03846154 -0.2692308
"))

b <- read.table(textConnection("
slope       start       stop
1  5.689229e-04 -0.85148515 -1.0000000
2 -1.613771e-04 -0.23762376 -0.8514851
3  9.879804e-05 -0.03960396 -0.2376238"))


trans <- list(a = a,b = b)

trans2 <- do.call(rbind, lapply(seq_along(trans),function(x) cbind(trans[[x]],name = x)))


require(ggplot2)

ggplot(trans2, aes(xmin = name, xmax = (name+1),
                   ymin = start, ymax = stop,
                   fill = slope)) +
  geom_rect() +
  scale_x_continuous(breaks = seq_along(trans)+.5, labels = names(trans))

Результат:

plot

...