完整代码

图片绘制过程完全是由R语言完成的,完整代码如下,细节说明见下文

library(imager)
opar = par(no.readonly = F)
gzh = load.image("129.二维码/公众号二维码.jpg")
wx = load.image("129.二维码/wechat.jpg")
bz = load.image("129.二维码/b站2.jpg")
zh = load.image("129.二维码/知乎.jpg") 

jpeg("poster.jpeg", width = 12, height = 8, units = "in", res = 600)
par(opar)
par(plt = c(0,1,0,1))
plot.new()
box()

par(fig = c(0.02,0.28,0.5,1), new = T)
plot(gzh, ann = F, axes = F)

par(fig = c(0,0.317,0.02,0.55), new = T)
plot(zh, xlim = c(0, 1200), ann = F, axes = F)

par(fig = c(0.24,0.54,0.42,0.95), new = T)
plot(bz, ann = F, axes = F)

par(fig = c(0.28,0.54,0,0.5), new = T)
plot(wx, ann = F, axes = F)

par(fig = c(0,1,0,1), new = T)
plot(1, type = "n", xlim = c(0,1), ylim = c(0,1), ann = F, axes = F)
segments(0.55, 0, 0.55, 1, lty = 2)
segments(0.58, 0.5, 1, 0.5, lty = 2)  

arrows(0.1,1.02,0.1,0.985, length = 0.2)
segments(0.1,1.02, 0.8, 1.02, lty = 2)
segments(0.8,1.02,0.8,0.985)
text(0.8,0.95, "「R语言学堂」公众号", font = 2, cex = 2)
text(0.8, 0.8, "数据处理通识专辑、制表与可视化专辑\n\n数学模型专辑、地理制图与分析专辑", cex = 1.5)
text(0.58, 0.65, "后台或推文底部发消息发送「关键词」:", adj = 0, font = 2, cex = 1.5)
text(0.58, 0.58, "推文合集、示例数据、合作交流", adj = 0, cex = 1.5)

arrows(0.4,-0.02, 0.4,0.015, length = 0.2)
segments(0.4,-0.02, 0.8, -0.02, lty = 2)
segments(0.8,-0.02,0.8,0.015)
text(0.8,0.05, "「学堂君」微信号", font = 2, cex = 2) 
text(0.58, 0.3, "自媒体同行交流(转载、互推等)\n\n商务合作(理财类不接)\n\n读者付费咨询", 
     adj = 0, cex = 1.5)

dev.off()

细节说明

加载外部图片

本文使用的二维码图片格式都是jpeg/jpg,这种格式的图片可以通过imager工具包中的load.image()函数加载。加载过后,可以使用plot()函数再在R环境中绘制出来。

library(imager)
gzh = load.image("129.二维码/公众号二维码.jpg")
plot(gzh)



隐藏边框、坐标轴

plot()函数的axes参数控制是否显示边框和坐标轴,ann参数控制是否显示坐标轴标签和图象标题。完整的参数介绍见推文基础绘图系统(一)——主函数plot及其参数。

plot(gzh, ann = F, axes = F)



图象叠加

plot()函数作为基础绘图系统的高级函数,每次使用都默认打开新的绘图界面。若想进行图层叠加,需要在使用第二个及其以后的高级绘图函数前运行语句par(new = T)。叠加图象的位置可以由fig参数设置。

par(plt = c(0,1,0,1))
plot.new()
box()

par(fig = c(0.02,0.28,0.5,1), new = T)
plot(gzh, ann = F, axes = F)



低级函数

图片中的外边框(box())、虚线(segments())、箭头(arrows())、文字(tex())都是使用对应的低级函数绘制的。低级函数只能在原图层上叠加要素,不能打开新绘图界面。

par(plt = c(0,1,0,1))
plot.new()
box()

par(fig = c(0,1,0,1), new = T)
plot(1, type = "n", xlim = c(0,1), ylim = c(0,1), ann = F, axes = F)
segments(0.55, 0, 0.55, 1, lty = 2)
segments(0.58, 0.5, 1, 0.5, lty = 2)  

arrows(0.1,1.02,0.1,0.985, length = 0.2)
segments(0.1,1.02, 0.8, 1.02, lty = 2)
segments(0.8,1.02,0.8,0.985)
text(0.8,0.95, "「R语言学堂」公众号", font = 2, cex = 2)

arrows(0.4,-0.02, 0.4,0.015, length = 0.2)
segments(0.4,-0.02, 0.8, -0.02, lty = 2)
segments(0.8,-0.02,0.8,0.015)
text(0.8,0.05, "「学堂君」微信号", font = 2, cex = 2)


  • 如果要进行字体设置,可以参考推文showtext | R语言绘图字体设置——针对Windows系统。
保存图片和反复试验

一些参数的设置不是一蹴而就的,尤其是控制位置、大小的参数,需要反复试验进行调整。图片效果除和参数有关外,还和输出尺寸有关,因此需要将图片输出到本地后观察效果。

保存jpeg/jpg格式的图片的方法如下:

jpeg("E:/poster.jpeg", width = 12, height = 8, units = "in", res = 600)

...code...

dev.off()

保存pdf格式的图片的方法如下:

pdf("E:/poster.pdf", width = 12, height = 8, units = "in")

...code...

dev.off()
  • pdf格式为矢量图片,不需要设置分辨率。

制作海报

相信各位读者在看完本文后,应该能够举一反三,知道如何使用R语言绘制一张海报了。

推荐阅读

R语言输出SVG图片 r语言如何输出图片_matlab

ggplot2基础语法系列推文汇总

R语言输出SVG图片 r语言如何输出图片_matlab_02

胶水函数用法的几个例子

R语言输出SVG图片 r语言如何输出图片_R语言输出SVG图片_03

空间计量经济模型的简单形式在R语言中的实现

R语言输出SVG图片 r语言如何输出图片_编程语言_04

使用R语言的常用工具包绘制双变量填充地图

R语言输出SVG图片 r语言如何输出图片_编程语言_05

R语言基础绘图系统的拼图功能