今天的推文是个 ggplot2 案例,不过也是一个动态图表,在开始敲今天的代码之前我们先了解一下什么是“赫罗图”?
赫罗图(Hertzsprung-Russell diagram,简写为 H-R diagram 或 HRD)是丹麦天文学家赫茨普龙及由美国天文学家罗素分别于 1911 年和 1913 年各自独立提出的。后来的研究发现,这张图是研究恒星演化的重要工具,因此把这样一张图以当时两位天文学家的名字来命名,称为赫罗图。赫罗图是恒星的光谱类型与光度之关系图,赫罗图的纵轴是光度与绝对星等,而横轴则是光谱类型及恒星的表面温度,从左向右递减。恒星的光谱型通常可大致分为 O.B.A.F.G.K.M 七种,要记住这七个类型有一个简单的英文口诀 “Oh be A Fine Girl/Guy. Kiss Me!”
上面一段是我百度的。。。
这篇文章的核心代码来源于 zonination/h-r-diagram。 当然我不是 Ctrl + C / V 把代码直接复制过来,而是在作者的代码基础上进行了更正和改进。
附件中有本文需要的两个数据:
- hygdata_v3-1.csv
- hygdata_v3-2.csv
我们使用 readr 包把这两个数据集读入 R 中并使用 rbind 函数进行行连接:
library(tidyverse) |
通过绘制一系列带有不同透明度的静态图合成动图就可以产生星星闪耀的效果。为此,我们先生成一列随机数:
catalog$randomseed <- runif(nrow(catalog), min = 0, max = 2 * pi) |
这个随机数服从[0,2π]的均匀分布。
我们先绘制一幅静态图:
ggplot(catalog, aes(ci, absmag)) + |
![]()
突然发现我们甚至可以把这幅图制作成一幅艺术品,为此我们可以把文本、轴线等删除了:
ggplot(catalog, aes(ci, absmag)) + |
![]()
最后使用 for 循环是生成 37 张透明度不同的图片然后再合并为 GIF 图:
for (n in seq(0, 360, 10)) { |
结果很大,这里就不展示结果了,感兴趣的小伙伴可以自己运行查看。附件中还有将 GIF 转为 mp4 的代码。
把多个图片合成 GIF 图 可以使用终端命令 convert,如果你的电脑没有这个工具,可以使用 magick 工具,下载和使用方法可以阅读这里:https://www.imagemagick.org/script/command-line-processing.php
点击这里跳转到 RStata 短书平台获取附件:ggplot2 案例:赫罗图
评论