创建乐高版本的马赛克图像 简介 今日内容比较“无用”,觉得比较好玩,所以就做一期“异类”可视化啦!主要介绍下 brickr 包,它将乐高(LEGO) 带入 R 和 tidyverse 生态系统中,该包分为2个部分:
Mosaics(马赛克):将图像转换为乐高积木的马赛克图像。
3D 模型:使用 rgl 包,通过数据表构建 3D 乐高模型。
今天这一期主要介绍第一个部分:
马赛克 首先读取 PNG 或 JPEG 图像,然后使用 image_to_mosaic 和 build_mosaic 函数 构建成乐高版本的马赛克图。下面给出一个官方的例子:
# install.packages("brickr") library(brickr) # install.packages("png") library(png) # 图像获取 img <- tempfile() download.file("https://r-charts.com/images/favicon.png", img, mode = "wb") # 创建LEGO版本的mosaic图 readPNG(img) %>% image_to_mosaic() %>% build_mosaic() 如果未安装该包,可使用install.packages("brickr")进行安装。这里readPNG()来自 png 包,记得也要提前安装。
这里是先建立一个临时文件 img,然后将网上的一张图下载下来,并存储到 img 中。之后读取图像和转化为马赛克数据,最后构建成马赛克图。
当然,如果你可以加载本地的图像,例如,小编将自己公众号的头像进行上传演示:
readPNG("avatar.png") %>% image_to_mosaic() %>% build_mosaic() 得到的图形如下:
简介 最近在看一些关于贝叶斯深度学习在可靠性方向应用的文章,看到下面这篇文章,发表在可靠性方向顶刊的 ITR 中。
本文主要介绍使用贝叶斯深度学习来预测产品剩余使用寿命,但是传统的深度学习方法只能得到未来时间点的估计值,并不能包含不确定性因素,而使用贝叶斯深度学习,最后可以得到未来时间点预测值的分布。
文中在模拟阶段给出了一个用 matlab 得到的 3D 密度函数图。
主要目的是解释使用该方法预测出未来时间点对应剩余使用寿命(RUL)的分布,对应的点估计和真实值。可以看出,该方法点估计和真实值非常接近,并且还给出对应点的核密度函数。根据这个核密度函数你可以求出 $95%$ 的预测区间。
好像内容介绍太多了,本文不是文献解读😁。主要是复现这个图,那正式开始吧!
教程 对于这种 3D 的图形,ggplot2 包以及对应的拓展包好像不是很在行,但是也有一些教程可见:3D Plots with ggplot2 and Plotly。这里我们主要使用 plot3D 包中的 scatter3D 函数进行绘制,当然也可以尝试使用 Scatterplot3d 包。
首先构造一些模拟数据作为例子。这里我们假设每个时间点的密度函数服从正态分布,均值分别为 1:5,标准差都为 1。颜色是自己比较喜欢的几种配色,参考小明的推文:R语言ggplot2画图一套好看的配色以及调整字体的简单小例子。
mean1 = 1:5 # 刻画不同时间对应密度函数的均值 len = 1000 col = c("#02B1e6", "#E81D22", "#F9BC15", "#8015f9", "#20e81d", "#e64602") x <- seq(-5,10, length = len) y <- seq(1,5, length = 5) z = matrix(NA,length(x),5) for(i in 1:length(mean1)){ z[,i] = dnorm(x,mean1[i],1) } 之后使用 scatter3D 函数构建一个空的三维箱子(alpha=0)。这个函数前三个参数分别对应 x,y,z 坐标,bty(boxtype)表示箱子的类型,这里使用类似文献中的形式,之后我们将展示其他形式。phi,theta 主要是对上下角度和左右角度进行调整,ticktype = "detailed"将坐标轴详细展现出来。