require(ggplot2)
 p <- ggplot(iris) + aes(x = Sepal.Length, y = Sepal.Width, color=Species) + 
    geom_point(size=5) + theme_classic()

首先我们有一个图,是用ggplot2画的,上面这图大家太熟悉,不打印出来都知道是什么了。

我在最新版的ggimage中加入了一个ggbackground的函数,我随便从网上找一张iris的图片,我们把pimg同时传给ggbackground就好了,非常容易,于是图的内容还是一样,但加了一张我们给定的图片做为背景。

require(ggimage) 
img = "https://assets.bakker.com/ProductPics/560x676/10028-00-BAKI_20170109094316.jpg"
ggbackground(p, img)

哇这背景太花了,数据点的pattern并不能容易看清楚,其实图片我们还可以处理的,我们可以用magick包中处理图片的函数传给ggbackground,这里我套了两个函数,也是OK的。

require(magick)
ggbackground(p, img, 
    image_fun = function(x) image_negate(image_convolve(x, 'DoG:0,0,2')))

于是变成上面这样子,有点艺术感。然而还不仅仅是这样,我们可以设置透明度,可以给背景图片填充指定的颜色,喜欢阿猫阿狗的人可以用你喜欢的猫狗图片来做背景了,如果背景太花,除了上面处理一下图片之后,你还可以只用阿猫阿狗的轮廓,然后填充一定的颜色,还可以设置透明,弱化一下背景。

img = "http://phylopic.org/assets/images/submissions/bf5fe2c5-1247-4ed9-93e2-d5af255ec462.512.png"
p1 = ggbackground(p, img) + ggtitle("ggbackground(p, img)")
p2 = ggbackground(p, img, alpha=.3) + ggtitle("ggbackground(p, img, alpha=.3)")
p3 = ggbackground(p, img, alpha=.3, color="steelblue") + ggtitle('ggbackground(p, img, alpha=.3, color="steelblue")')
cowplot::plot_grid(p1, p2, p3, ncol=1)

这里画了三张图,第一张设背景,第二张设了透明度,第三张在第二张的基础上,把图片颜色给换了。

这个ggbackground只有5行代码,因为它内部使用了geom_imagegeom_image让我们在ggplot2中玩图片变得异常容易,更多精彩,请移步往期的文章: