добавить текст на тепловую карту с помощью locator ()

Я создаю тепловую карту через heatmap.2(). Я бы хотел, чтобы метки xaxis поворачивались на 45 градусов. Следуя инструкциям в других сообщениях, я попытался построить тепловую карту без меток x, а затем использовать text(), чтобы добавить их ... Вот что я пробовал:

#fake matrix
cheese.matrix <- matrix(runif(100),10,10)
#build color palette
my.palette <- colorRampPalette(c("blue", "green", "yellow", "orange", "red"), space="rgb")
#build a first heatmap
hm_cheese <- heatmap.2(cheese.matrix,Rowv=NA,Colv=NA,col=my.palette,
                       density.info=c("none"),margins(3,5),cexRow=0.8,
                       cexCol=0.8,key=TRUE,keysize=1,trace="none",
                       lhei=c(2,8), breaks=100)
#find the coordinates on the plot where I want to pu the first and the last label
pos2 <- locator()
pos2
$x
[1] 0.08129779 0.90164993

$y
[1] -0.06905376 -0.06372554

pos2 <- structure(list(x=c(0.08129779, 0.90164993), y=c(-0.06905376, -0.06372554)), .Names=c("x","y"))
#create a vector with the labels I want to add
labs <- c("NWC1.PR", "CURD1.PR", "NWC2.PR","CURD2.PR","NWC3.PR","CURD3.PR",  "NWC4.PR", "CURD4.PR", "NWC5.PR", "CURD5.PR")
#build another heatmap
hm_cheese <- heatmap.2(cheese.matrix,Rowv=NA,Colv=NA,col=my.palette,
                      density.info=c("none"),margins(3,5),key=TRUE,
                      keysize=1,trace="none", lhei=c(2,8), breaks=100, 
                      labCol="", add.expr=text(x=seq(pos2$x[1], pos2$x[2], len=10),
                      y=rep(pos2$y[1],10), srt=45, xpd=TRUE, adj=0, labels=labs))

Это поместило метки на тепловую карту, но все имена были перекрывающими ... Я также пробовал это:

hm_cheese2 <-heatmap.2(cheese.matrix,Rowv=NA,Colv=NA,col=my.palette,
                       density.info=c("none"),margins(3,5),key=TRUE,keysize=1,
                       trace="none", lhei=c(2,8), breaks=100, labCol="", 
                       add.expr=text(x=seq_along(labs), y=-0.06372554, srt=45,
                       xpd=TRUE, adj=0, labels=labs))

Результат был лучше, так как метки располагались вдоль оси, но все же очень близко между ними и перекрывали сюжет ...

Что-то не так в том, как я использовал locator() для нахождения координат? Может ли кто-нибудь помочь мне улучшить мой код?


person Francesca de Filippis    schedule 03.10.2013    source источник
comment
Меня заинтриговала идея сырной матрицы.   -  person Stewart Macdonald    schedule 02.04.2015


Ответы (1)


Вы можете поиграть с аргументом pos при вызове text. Например, используя pos=1:

hm_cheese2 <-heatmap.2(cheese.matrix,Rowv=NA,Colv=NA,col=my.palette,
                       density.info=c("none"),margins(3,5),key=TRUE,keysize=1,
                       trace="none", lhei=c(2,8), breaks=100, labCol="", 
                       add.expr=text(x=seq_along(labs), y=-0.06372554, srt=45,
                       xpd=TRUE, adj=0, labels=labs, pos=1))

введите описание изображения здесь

См. ?text для получения дополнительной информации о pos.

Если метки выходят за пределы графика, вы можете попробовать использовать xpd=NA, чтобы обрезать их в области устройства вместо графика или областей рисунка.

hm_cheese2 <-heatmap.2(cheese.matrix,Rowv=NA,Colv=NA,col=my.palette,
                       density.info=c("none"),margins(3,5),key=TRUE,keysize=1,
                       trace="none", lhei=c(2,8), breaks=100, labCol="", 
                       add.expr=text(x=seq_along(labs), y=-0.06372554, srt=45,
                       xpd=NA, adj=0, labels=labs, pos=1))
person plannapus    schedule 04.10.2013
comment
Привет, планнапус! Спасибо за вашу помощь! использование pos действительно улучшило ситуацию, но поскольку у меня больше меток, чем 10, используемых для примера (моя реальная матрица имеет 50 столбцов), последняя часть первой метки вырезана! Так что он не входил в область графика ... Я также пробовал использовать поля (0,0) или уменьшить размер шрифта, но часть первой метки всегда находится снаружи ... Есть ли способ иметь большая площадь участка? - person Francesca de Filippis; 04.10.2013
comment
@FrancescadeFilippis см. Отредактировать: проще всего было бы прикрепить метки к устройству, а не к рисунку, используя xpd=NA. Однако, если честно, мой совет, если у вас много этикеток, - наносить их не под углом 45 °, а вертикально, чтобы улучшить читаемость. - person plannapus; 05.10.2013