完整代码
图片绘制过程完全是由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()
制作海报
相信各位读者在看完本文后,应该能够举一反三,知道如何使用R语言绘制一张海报了。
推荐阅读
R语言基础绘图系统的拼图功能