我想在一个设备上的两个图之间绘制图像。重要的是,图像必须位于确切的中心,因此重叠两个图。请参阅示例,其中我使用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徽标:
保持外观,即没有轴,解决方法是添加一个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)
返回我想要的内容
但对我来说似乎不是一个好的解决方案。
为什么徽标会在第一个图中切割?轴与device / xpd的边距/尺寸有什么关系?
您是否有其他想法或解决方案如何在中心没有轴的情况下获得徽标(未切割)?
答案 0 :(得分:2)
似乎“传统和网格图形相互争斗以控制裁剪区域”,来自list email from Paul Murrell。他建议在网格命令之前添加grid.clip()
,如下所示。 1}}不再需要。
xpd
我无法解释如何添加轴会改变行为。
答案 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