如封面所示,如何使用R语言制作一张海报

细心的读者应该发现,在公众号上篇推文的底部,多了一个「推荐阅读」栏目以及一张如下图所示的图片:

ad03fde8e150e36ea99ba4fc57883a0d.png

这幅图构图也非常简单:左侧是学堂的公众号、知乎、b站和学堂君微信号的二维码,右侧是两栏介绍文案。

完整代码

图片绘制过程完全是由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)
28b5ade3d2682e46b1c4de710704df01.png
隐藏边框、坐标轴

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

plot(gzh, ann = F, axes = F)
1b8466a163c416fb31e897683c2eec9a.png
图象叠加

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)
733096f572cda1eabee3b668d0a46c7b.png
低级函数

图片中的外边框(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)
168e9564591f89ec0ce663759fc16717.png
保存图片和反复试验

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

保存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语言绘制一张海报了。

推荐阅读

2a69f64474a2d2481f6a3932463db08d.png
ggplot2基础语法系列推文汇总
f1e67ae3b22e0c1895a3d18f8a0a523c.png
胶水函数用法的几个例子
462fa619f007df56872b4cfb83d91d83.png
空间计量经济模型的简单形式在R语言中的实现
ef1f2120d01437473f6d503ef2781648.png
使用R语言的常用工具包绘制双变量填充地图
c0af0fc5bd595859094d7e59bebdf3d5.png
R语言基础绘图系统的拼图功能

f60c5bae661dcf4b8be2ddc160beb626.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值