绘制动态心形图案::R语言绘制心形图

时间:2022-05-04
本文章向大家介绍绘制动态心形图案::R语言绘制心形图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

原始方程源于此贴一楼:直通车

整理修改后: 被窝修改成这样:

x<-seq(-1.1,1.1,length = 3000)
rep<-30
y<-matrix(,3000,rep) #创建矩阵
yx<-matrix(,3000,rep) #创建矩阵
xx<-matrix(,3000,rep) #创建矩阵
c<-seq(0,1,length=rep) #立体效果
for (i in 1:rep)
for (p in 1:3000){
y[p,i]<-(1-(x[p])^2)^(1/2)+((x[p])^2)^(1/4)+c[i]
yx[p,i]<--(1-(x[p])^2)^(1/2)+((x[p])^2)^(1/4)+c[i]
xx[,i]<-x}
for (q in 2:15){
par(bg="pink")
plot(main="中国(标题可更改)", c(rev(xx),xx),c(rev(y),yx),type='l',xlim = c(-1,1),xlab = "LOVE YOU",col.lab="red",font.lab=9,cex.lab=3,ylab = "",axes=F,col=q)
Sys.sleep(1)} #Sys.sleep(1)动态效果

据说笛卡尔死前寄出的最后一封信,里面只有短短的一行:r=a(1&#x2212;sin&#x03B8;)'>r=a(1−sinθ) r=a(1−sinθ) ,这就是有名的心形函数。情人节将至,我用R语言的grid包画了几幅图片,希望借此平台赠与我相恋五年的男友,也希望与各位统计爱好者分享快乐。

首先,我利用grid.lines()把转化为直角坐标系的(x, y)两两相连围成心形,构建了一个heart function作为基本图形。

x=16(sint)3y=13cost&#x2013;5cos2t&#x2013;2cos3t&#x2013;cos4t'>xy =16(sint) 3 =13cost–5cos2t–2cos3t–cos4t x=16(sint)3y=13cost–5cos2t–2cos3t–cos4t

为了得到嵌套心形图案,我使用了grid包创建了多个viewport。viewport是grid包的一个重要特色,此概念类似于photoshop的图层。

创建一个viewport,我们需要设置它的位置、长度和宽度,下图虚线实际上并不出现在R的output里面,但这个矩形区域图层会成为接下来画图的区域。构建了新的viewport以后,我们可以用pushViewport()命令锁定该图层,使之成为目标区域。我们也可以构建多个viewport,几个viewport之间可以通过命令相互切换。

例如,在第一个图层的基础上在新建一个图层,调整新图层的长度与宽度使之稍微小于第一个图层, 用pushViewport()锁定新图层,再调用一次心形函数,以此类推,循环创建多个嵌套图层,并依次在各个图层上画心形函数,于是我们可以得到一系列嵌套的心形。 此外,grid包允许我们对图形进行复制、旋转、放缩等修改。要旋转心形函数,我们并不需要修改函数本身,而是可以通过旋转viewport的方式旋转我们所需要绘制的图形。设置新viewport,调整angle函数,那么在此图层下绘制的任何图形将会被旋转。

利用viewport对图形进行修改,我们可以绘制各种有趣的图形pattern,本人只是grid包的初学者,如有偏颇之处望多多包涵。最后,祝愿大家情人节快乐! 以下是“情人节礼物”的代码:直通车