2016-04-26 6 views
2

Я хотел бы добавить заголовок для легенды в графе levelplot, сохраненном в переменной.R - Как добавить название легенды в levelplot, сохраненное в переменной?

Например, этот код работает:

library(lattice) 
library(grid) 
x = 1:10 
y = rep(x,rep(10,10)) 
x = rep(x,rep(10)) 
z = x+y 
levelplot(z~x*y, colorkey=list(labels=list(cex=1,font=2,col="brown"),height=1,width=1.4),main=list('b',side=1,line=0.5)) 
trellis.focus("legend", side="right", clipp.off=TRUE, highlight=FALSE) 
grid.text(expression(m^3/m^3), 0.2, 0, hjust=0.5, vjust=1) 
trellis.unfocus() 

Но этот код, где тот же сюжет сохраняются в виде переменной, не работает:

p1 <- levelplot(z~x*y, colorkey=list(labels=list(cex=1,font=2,col="brown"),height=1,width=1.4),main=list('b',side=1,line=0.5)) 
trellis.focus("legend", side="right", clipp.off=TRUE, highlight=FALSE) 
grid.text(expression(m^3/m^3), 0.2, 0, hjust=0.5, vjust=1) 
trellis.unfocus() 

Как я могу добиться этого?

+1

http://r.789695.n4.nabble.com/Adding-title-to-colorkey-td4633584.html выглядит намного проще – user20650

ответ

1

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

Включает в себя настройку функции draw.colorkey.

Самый простой способ заключается в использовании fixInNamespace интерактивно

fixInNamespace("draw.colorkey", "lattice") 

в конце функции измените последние несколько строк

} 
    if (!is.null(key$title)) { 
     key.gf <- placeGrob(key.gf, textGrob(key$title, hjust = key$hjust, 
      vjust = key$vjust, gp = key$gp), row = key$row, col = key$column) 
    } 
    if (draw) 
     grid.draw(key.gf) 
    key.gf 
} 

Сохранить и закрыть, а затем вы можете использовать, как показано ниже ,


Однако, вы не можете быть в состоянии сделать это в интерактивном режиме, так что это может быть сделано, как

library(lattice) 
library(grid) 

# Amend key function 
# Hopefully a nicer way to do this! 
mykey <- draw.colorkey 

body(mykey)[28:30] <- list(
quote(
    if(!is.null(key$title)){ 
     key.gf <- placeGrob(key.gf, 
         textGrob(key$title,hjust=key$hjust, vjust=key$vjust, gp=key$gp), 
          row=key$row, col=key$column) 
    }), 
body(mykey)[[28]], 
body(mykey)[[29]]) 

# Assign to namespace: http://stackoverflow.com/questions/6254744/override-a-function-that-is-imported-in-a-namespace 
unlockBinding("draw.colorkey", as.environment("package:lattice")) 
assign("draw.colorkey", mykey, "package:lattice") 
unlockBinding("draw.colorkey", getNamespace("lattice")) 
assign("draw.colorkey", mykey, getNamespace("lattice")) 

Вы можете передать ключ заголовка, указав в положение

# Draw plot 
x = 1:10 
y = rep(x,rep(10,10)) 
x = rep(x,rep(10)) 
z = x+y 
p <- levelplot(z~x*y, 
       colorkey=list(labels=list(cex=1, font=2, col="brown"), 
          height=1, width=1.4, 
          title=expression(m^3/m^3), row=3, column=1, vjust=2), 
       main=list('b',side=1,line=0.5)) 


p 

Какие производит

enter image description here

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

  • Нет связанных вопросов^_^