将边框添加到rasterImage

7

这是我使用rasterImage创建的渐变色图例:

colfunc <- colorRampPalette(c("red", "blue"))
legend_image <- as.raster(matrix(colfunc(20), ncol=1))
plot.new()
rasterImage(legend_image, 0.9, 0, 1, 1)     
lbsq <- seq.int(0, 1, l=5)                                  
axis(4, at=lbsq, pos=1, labels=F, col=0, col.ticks=1, tck=-.05) 
mtext(lbsq, 4, -.2, at=lbsq, las=2, cex=.6)

我希望在颜色图例周围添加一个细黑色边框。 我尝试在 rasterImage 中添加 lty = 1,但无效。 我的问题是如何添加黑色边框到结果图像并调整其颜色和宽度。
2个回答

2
您可以略微增加边距并使用box()
colfunc <- colorRampPalette(c("red", "blue"))
legend_image <- as.raster(matrix(colfunc(20), ncol=1))
plot.new()
rasterImage(legend_image, -.1, -.1, 1.1, 1.1)
box(lwd=3)

你可以使用par来进行操作。
png('test.png', 600, 400)

plot.new()
par(new=TRUE, mar=c(5.8, 40, 4, 4))
rasterImage(legend_image, .9, 0, 1.1, 1.1)
box(lwd=1)
par(mar=c(5.4, 4, 3.9, 4.8)+.1, new=TRUE)
plot(1:10)

dev.off()

请注意,在使用绘图预览窗口时,这可能会比较不稳定。建议使用png()pdf(),如所示。

输入图像描述


@Patrick 请看更新获取可能的解决方案。我认为您考虑添加主要情节。您可能还对我最近的回答感兴趣。 (https://dev59.com/JWYr5IYBdhLWcg3w29lI#70522655) - jay.sf
@Patrick 最后一行(已删除)只是垃圾,请忽略它。 - jay.sf
@Patrick,请查看更多可重现的更新。 - jay.sf
1
@jay.sf 很棒的解决方案!当我发布我的答案时,OP还没有更新问题。现在更有意义了。 - Dion Groothof
1
@Dion 谢谢,你的解决方案也非常聪明!看一下 ?grconvertX?grconvertY,对你可能很有趣,因为你似乎也喜欢低级别的绘图。 - jay.sf
显示剩余4条评论

1
使用rect()函数,以下代码添加了一个黑色边框。
colfunc <- colorRampPalette(c("red", "blue"))
legend_image <- as.raster(matrix(colfunc(20), ncol=1))
plot.new()
rect(par("usr")[1], par("usr")[3], par("usr")[2], par("usr")[4], col = "black")
rasterImage(legend_image, 0, 0, 1, 1)

enter image description here


对于我的实际分析,我设置了rasterImage(legend_image, 0.9, 0, 1.1, 1.1)。是否可以调整rect,使边框仅包围着有色区域,并且四个边的厚度相同? - Patrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接