R语言用数学生成美丽的图案
专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。
【R语言】已开通R语言社群,五湖四海,天南地北,各行各业,有缘相聚,共享R事,雕刻数据,求解问题,以创价值。喜乐入群者,请加微信号luqin360,或扫描文末二维码,添加为好友,同时附上R-入群。有朋自远方来,不亦乐乎,并诚邀入群,以达相互学习和进步之美好心愿。
“科学家研究自然不是因为它有用。他研究它是因为喜欢它,他喜欢它是因为它美丽。”Henri Poincare说。
有许多可以用数学术语描述的自然事实的例子。很好的例子是雪花的形状,罗马花椰菜的分形几何形状或自相似性如何决定植物的生长。
R是进行认真分析的工具,但并非生活中的每一件事都是认真的。生活也很有趣,R可以用来玩乐和做美丽的事情。它的图形功能可用于生成艺术图像,例如本文生成的图像,该图像的灵感来自植物如何布置其叶子。这个事实称为叶序。
在本文中,我们使用R语言的ggplot2软件包。一方面,我们将学习和掌握它的许多重要功能和使用方法;另一方面,我们利用ggplot2包的强大可视化能力和优美的数学以进行艺术的创造,感受艺术之美和生活乐趣。
一、ggplot2
R语言强大的可视化包
ggplot2是R语言强大的可视化包,基于图像语法和分层架构以实现各种高质量的图形。
1、ggplot2包加载
ggplot2包是R语言扩展包,使用它之前,需要先安装好并完成加载。
# ggplot2包安装和加载
library(pacman)
p_load(ggplot2)
二、在一个圆上画散点图
圆是一种美
ggplot2对数据有强大的表示能力,对应着各式各样的图形,可以从简单的散点图到复杂的小提琴图。以geom_开头的函数族定义了要把数据以一种什么几何体来绘制。
我们先从半径为1的圆上绘制50个点开始。即每个点(x,y)都对应在单位圆上。
2、半径为1的圆上绘制50个点
# 半径为1的圆上50个点
t <- seq(0, 2*pi, length.out = 50)
x <- sin(t)
y <- cos(t)
df <- data.frame(t, x, y)
p <- ggplot(df, aes(x, y))
p + geom_point()
三、螺旋式排列
黄金角的美
植物的叶子呈螺旋状排列。螺旋线是一条曲线,它从原点开始,随着它绕其旋转而远离该点。在上面的图中,我们所有的点到原点的距离都是相同的。将它们螺旋排列的一种简单方法是在x和y乘以一个因子。我们使用黄金角:
此数字的灵感来自黄金分割率,这是数学史上最著名的数字之一。黄金分割率和黄金分割角都出现在自然界中意想不到的地方。除了花瓣和植物叶子,您还会在种子头,松果,向日葵种子,贝壳,螺旋星系,飓风等中找到它们。
3、基于黄金角螺旋排列散点图
# 基于黄金角螺旋排列散点图
points <- 500
angle <- pi * (3 - sqrt(5)) # 环境角计算公式
t <- (1:points) * angle
x <- sin(t)
y <- cos(t)
df <- data.frame(t, x, y)
p <- ggplot(df, aes(x*t, y*t))
p + geom_point()
四、图像的修饰
精雕细琢
艺术的东西,总是一种恰到好处,不多不少。使用ggplot2绘制的图形,除了把数据展示出一种美,也增加了一些其它组件,例如:
-
灰色的背景
-
水平和垂直的白线组成的网格线
-
轴的刻度
-
每个轴上都有一个标题
-
文本沿着轴方向做了标记
我们移除这些不必要的组件,同时对点的大小、颜色和透明做修饰和配置。
4、图像的修饰
# 图像的修饰
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(size=8, alpha=0.5, color="darkgreen") +
theme(
panel.grid = element_blank(),
axis.ticks = element_blank(),
title = element_blank(),
text = element_blank(),
panel.background = element_rect(fill = "white")
)
五、蒲公英
迎风而飘
直到现在,所有的点都有相同的外观(大小,颜色,形状和alpha)。有时,我们希望使点的外观依赖于数据集中的一个变量。现在我们将设置大小变量。我们还将改变点的形状。虽然我们不能吹它,但最终的图像应该会让你想起蒲公英。
5、生成蒲公英
# 生成蒲公英
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(aes(size = t), alpha = 0.5, shape = 8, color = "black") +
theme(
panel.grid = element_blank(),
axis.ticks = element_blank(),
title = element_blank(),
text = element_blank(),
panel.background = element_rect(fill = "white"),
legend.position = "none"
)
六、向日葵
向阳而生
植物不仅使用黄金角来布置叶子。在葵花籽的排列中也满足这个规律。 我们稍加修改,就可以绘制出向日葵,真奇妙。
6、生成向日葵
# 生成向日葵
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(aes(size = t), alpha = 0.5, shape = 17, color = "yellow") +
theme(
panel.grid = element_blank(),
axis.ticks = element_blank(),
title = element_blank(),
text = element_blank(),
panel.background = element_rect(fill = "darkmagenta"),
legend.position = "none"
)
七、角度变化
多姿多彩
通过角度的调整,可以生成多姿多彩的图案,感慨大自然的千变万化和奇妙无穷。举一例如下。
7、角度变化后新图形
angle <- 2.0
points <- 1000
t <- (1:points)*angle
x <- sin(t)
y <- cos(t)
df <- data.frame(t, x, y)
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(aes(size = t), alpha = 0.5, shape = 17, color = "yellow") +
theme(
panel.grid = element_blank(),
axis.ticks = element_blank(),
title = element_blank(),
text = element_blank(),
panel.background = element_rect(fill = "darkmagenta"),
legend.position = "none"
)
八、总结
充分发挥您的想象力
到目前为止,上面所展示的技术可以让我们根据自然的灵感创建无限数量的模式:唯一的限制是个人的想象力。通过艺术的创造,美丽的欣赏,学习和使用ggplot2包,也是一件有趣的事情。
请发挥您的想象力,从各个方面做修改和创新,生成一幅幅美好的图案,以让人赏心悦目,其乐无穷。
附录:本文完整代码
# ggplot2包安装和加载
library(pacman)
p_load(ggplot2)
# 半径为1的圆上50个点
t <- seq(0, 2*pi, length.out = 50)
x <- sin(t)
y <- cos(t)
df <- data.frame(t, x, y)
p <- ggplot(df, aes(x, y))
p + geom_point()
# 基于黄金角螺旋排列散点图
points <- 500
angle <- pi * (3 - sqrt(5)) # 环境角计算公式
t <- (1:points) * angle
x <- sin(t)
y <- cos(t)
df <- data.frame(t, x, y)
p <- ggplot(df, aes(x*t, y*t))
p + geom_point()
# 图像的修饰
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(size=8, alpha=0.5, color="darkgreen") +
theme(
panel.grid = element_blank(),
axis.ticks = element_blank(),
title = element_blank(),
text = element_blank(),
panel.background = element_rect(fill = "white")
)
# 生成蒲公英
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(aes(size = t), alpha = 0.5, shape = 8, color = "black") +
theme(
panel.grid = element_blank(),
axis.ticks = element_blank(),
title = element_blank(),
text = element_blank(),
panel.background = element_rect(fill = "white"),
legend.position = "none"
)
# 生成向日葵
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(aes(size = t), alpha = 0.5, shape = 17, color = "yellow") +
theme(
panel.grid = element_blank(),
axis.ticks = element_blank(),
title = element_blank(),
text = element_blank(),
panel.background = element_rect(fill = "darkmagenta"),
legend.position = "none"
)
angle <- 2.0
points <- 1000
t <- (1:points)*angle
x <- sin(t)
y <- cos(t)
df <- data.frame(t, x, y)
p <- ggplot(df, aes(x*t, y*t))
p + geom_point(aes(size = t), alpha = 0.5, shape = 17, color = "yellow") +
theme(
panel.grid = element_blank(),
axis.ticks = element_blank(),
title = element_blank(),
text = element_blank(),
panel.background = element_rect(fill = "darkmagenta"),
legend.position = "none"
)
参考资料
1、ggplot2包学习和使用
https://ggplot2.tidyverse.org/reference/
2、黄金角
https://en.wikipedia.org/wiki/Golden_angle
资料推荐
1 R语言机器学习3本经典书籍集合本,提高你的R语言和机器学习能力!(可供下载)
2 R数据分析和可视化培训课程书籍,5大模块,助你学习数据分析和挖掘技术(可供下载)
3 R语言实战英文书籍,配套源代码,帮助你学习R语言!(可下载)
公众号推荐
数据科学与人工智能
数据科学与人工智能公众号推广Python语言,数据科学与人工智能的知识和信息。扫码下方二维码关注我,一起学习Python语言和数据科学与人工智能。
R语言群
诚邀您加入
请扫下方二维码加我为好友,备注R-入群。有朋自远方来,不亦乐乎,并诚邀入群,以达相互学习和进步之美好心愿。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!