在R中,我试图在绘图区域外绘制图像(作为图例)。但是,par(xpd=T)
或par(xpd=NA)
似乎无法正常工作。
这是错误的最小可重复示例,产生以下图表。
par(mar=c(4,4,4,4),xpd=F)
plot(1:2,1:2)
x <- c(2,2.1)
y <- seq(1.1,1.9,len=10)
m <- matrix(seq(0,1,len=10),ncol=10,nrow=2,byrow=T)
par(xpd=T)
image(x-.2,y,m,add=T)
image(x+.05,y,m,add=T)
par(xpd=NA)
image(x-.2,y,m,add=T)
image(x+.05,y,m,add=T)
两个彩色条应该具有相同的宽度,但当然右边的条被剪裁,不同于par
所说的帮助:
XPD
逻辑值或NA。如果为FALSE,则所有绘图都被剪切到 绘图区域,如果为TRUE,则所有绘图都剪切到图形区域, 如果是NA,则所有绘图都被剪切到设备区域。也可以看看 剪辑
这是一个错误,还是我做错了什么?
我正在使用R版本3.3.3(2017-03-06) - &#34;另一个独木舟&#34;,平台:x86_64-pc-linux-gnu(64位),带有RStudio版本1.1.447,在Debian Stretch中。
答案 0 :(得分:1)
坦率地说,我对你的问题没有直接的答案。我很确定它与image()
有关,因为xpd = TRUE
适用于其他函数,例如text()
。
这里有两个或多或少的hacky解决方案,对我来说对你的MWE有用,并希望能帮助你实际的情节:
x <- c(2, 2.1)
y <- seq(1.1, 1.9, len = 10)
m <- matrix(seq(0, 1, len = 10),
ncol = 10, nrow = 2, byrow = TRUE)
# Solution 1: useRaster = TRUE
par(mar = c(4, 4, 4, 4), xpd = TRUE)
plot(1:2, 1:2)
image(x + .05, y, m, add = TRUE, useRaster = TRUE)
# text(x + .05, y, "foo")
# Solution 2: grid.clip() plus image() twice
par(mar = c(4, 4, 4, 4), xpd = TRUE)
plot(1:2, 1:2)
image(x + .05, y, m, add = TRUE)
grid::grid.clip()
image(x + .05, y, m, add = TRUE)