R - 如何将图例标题添加到保存到变量的水平图中?
R - How to add legend title to levelplot saved to a variable?
我想在保存到变量的水平图中添加图例的标题。
例如,这段代码有效:
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()
我怎样才能做到这一点?
这并没有直接回答您的问题,但它可能提供了工作流程的变化,您可以在其中使用 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://whosebug.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"))
然后可以传递一个key title,指定位置
# 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
产生
我想在保存到变量的水平图中添加图例的标题。
例如,这段代码有效:
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()
我怎样才能做到这一点?
这并没有直接回答您的问题,但它可能提供了工作流程的变化,您可以在其中使用 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://whosebug.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"))
然后可以传递一个key title,指定位置
# 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
产生