其他
中秋特刊 | R还可以绘图:八月十五招友玩“月”
华阳观中八月十五日夜招友玩月
唐 · 白居易
人道秋中明月好,欲邀同赏意如何?
华阳洞里秋坛上,今夜清光此处多。
值此中秋佳节来临之际,数据Seminar全体成员,预祝大家中秋节快乐,生活、工作、学习,事事顺心!
中秋明月夜
在Paul Murrell代码(点击阅读原文即可查看)基础上,经过不断调试和渲染,利用R中grid包,绘制“中秋明月夜”图(整体效果见上图),与大家共赏佳节,代码如下(复制代码运行即可):
##加载grid包
library(grid)
##绘制夜空
pushViewport(viewport(xscale=c(0, 1), yscale=c(0.2, 1),
clip=TRUE))
res <- 50
for (i in 1:res)
grid.rect(y=1 - (i-1)/res, just="top",
gp=gpar(col="grey30", fill=grey(0.8*i/res)))
##绘制中秋月
moon <- function(x, y, size) {
angle <- seq(0, 2*pi,length=180)
x1 <-x+1.5*size*cos(angle)
y1 <-y+1.5*size*sin(angle)
mod<-0
x2 <- x+mod*(x1-x)
grid.polygon(c(x1-0.065, rev(x2)), c(y1, rev(y1)),
default.unit="native",
gp=gpar(col=NULL, fill="yellow"))
}
moon(.25, .85, 0.04)
##绘制星空
star <- function(x, y, size) {
x1 <- c(x, x + size*.1, x + size*.5, x + size*.1,
x, x - size*.1, x - size*.5, x - size*.1) + .05
y1 <- c(y - size, y - size*.1, y, y + size*.1,
y + size*.7, y + size*.1, y, y - size*.1) + .05
grid.polygon(x1, y1,
default.unit="native",
gp=gpar(col=NULL, fill="yellow"))
}
star(.5, .7, .02)
star(.8, .9, .02)
star(.72, .74, .02)
star(.62, .88, .02)
star(.51,.80,.02)
grid.circle(runif(20, .2, 1), runif(20, .6, 1), r=.002,
default.unit="native",
gp=gpar(col=NULL, fill="yellow"))
##绘制山景
hill <- function(height=0.1, col="grey30") {
n <- 100
x <- seq(0, 1, length=n)
y1 <- sin(runif(1) + x*2*pi)
y2 <- sin(runif(1) + x*4*pi)
y3 <- sin(runif(1) + x*8*pi)
y <- 0.4 + height*((y1 + y2 + y3)/3)
grid.polygon(c(x, rev(x)), c(y, rep(0, n)),
default.unit="native",
gp=gpar(col=NULL, fill=col))
}
hill()
##添加文本
rdir <- function(n) {
sample(seq(-45, 45, length=10), n)/180*pi
}
grid.text("Happy Mid-Autumn Festival!",
x=.38, y=.84, just="bottom",
default.unit="native",
gp=gpar(col="yellow", fontsize=15))
grid.text("人道秋中明月好,欲邀同赏意如何?",
x=.385, y=.8, just="bottom",
default.unit="native",
gp=gpar(col="yellow", fontsize=10))
grid.text("——白居易《华阳观中八月十五日夜招友玩月》",
x=.5, y=.78, just="bottom",
default.unit="native",
gp=gpar(col="yellow", fontsize=8))
grid.text("数据Seminar",
x=.9, y=.25, just="bottom",
default.unit="native",
gp=gpar(col="white", fontsize=15))
popViewport()
►往期推荐
回复【Python】👉简单有用易上手
回复【学术前沿】👉机器学习丨大数据
回复【数据资源】👉公开数据
回复【可视化】👉你心心念念的数据呈现
回复【老姚专栏】👉老姚趣谈值得一看
►一周热文
特别推荐 | “正则表达式”在工业企业数据库匹配中的运用(一)
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
欢迎扫描👇二维码添加关注