当R图中的轴= F时,par(xpd = NA)不起作用

时间:2016-06-06 13:33:41

标签: r image plot

我想在一个设备上的两个图之间绘制图像。重要的是,图像必须位于确切的中心,因此重叠两个图。请参阅示例,其中我使用R logo作为图像:

# png and grid are both for plotting the image
library("png") 
library("grid") 
Rlogo <- readPNG("Rlogo.png")

par(mfrow=c(1,2), xpd=NA) # two columns, xpd should permit plotting outside of margin
barplot(-(1:10), horiz=T, border=NA, axes=FALSE)
grid.draw(rasterGrob(Rlogo, x=unit(0.5, "npc"), y = unit(0.5, "npc"), width=unit(0.1, "npc"), height=unit(0.1, "npc")))
barplot(1:10, horiz=T, border=NA, axes=F)

导致切割R徽标:

R logo gets cut

保持外观,即没有轴,解决方法是添加一个col =“white”的轴:

par(mfrow=c(1,2), xpd=NA)
barplot(-(1:10), horiz=T, border=NA, axes=FALSE)
axis(1, labels=F, col = "white")
# axis(1, labels=F, tick=F) # does not help
grid.draw(rasterGrob(Rlogo, x=unit(0.5, "npc"), y = unit(0.5, "npc"), width=unit(0.1, "npc"), height=unit(0.1, "npc")))
barplot(1:10, horiz=T, border=NA, axes=F)

返回我想要的内容

plot with logo

但对我来说似乎不是一个好的解决方案。

为什么徽标会在第一个图中切割?轴与device / xpd的边距/尺寸有什么关系?

您是否有其他想法或解决方案如何在中心没有轴的情况下获得徽标(未切割)?

2 个答案:

答案 0 :(得分:2)

似乎“传统和网格图形相互争斗以控制裁剪区域”,来自list email from Paul Murrell。他建议在网格命令之前添加grid.clip(),如下所示。

xpd

我无法解释如何添加轴会改变行为。

enter image description here

答案 1 :(得分:0)

我建议我最喜欢的经典方法(没有网格)。

library("png") 
Rlogo <- readPNG("Rlogo.png")

par(mfrow=c(1,2), mar=c(2,2,2,2))
barplot(-(1:10), horiz=T, border=NA, axes=FALSE)
barplot(1:10, horiz=T, border=NA, axes=F)

par(mfrow=c(1,1), new=T, mar=c(2,2,2,2))
plot(0,0, type="n", axes=F, ann=F, asp=1)  # flat mar and asp=1 are important to keep size ratio. 
a <- 0.3                                   # now the center is c(0, 0)
rasterImage(Rlogo, - a / 2, - a * 7 / 8 / 2 , a / 2,  a * 7 / 8 /2 )  # R logo is 800 x 700
                   # xleft,     ybottom,      xright,     ytop

plot