Mat*_*ach 6 r bitmap scatter-plot ggplot2
我最近在Github上找到了一个软件包,其中开发人员分析了由Antonio Prohias出版的248期Spy vs Spy漫画中的粉丝精选数据.
他进行了一些基本的探索性数据分析,计算了黑暗间谍胜利的运行净得分,然后进行了非参数测试(Wald Wolfowitz测试)以查看其中一个间谍的连续胜利集群,以确定Prohias是否保留通过扭转之前的结果,或者如果他可能选择了最爱,得分平衡.
虽然我发现这是一个有趣的练习,但我最感兴趣的是Spy Plot.
Spy Plot的点数据实际上来自MATLAB复活节彩蛋 spy()
包,开发人员将这一点数据作为tibble :: tribble放入R中.
我的问题是如何从图像中创建点数据?是否可以在R中imager()
进行边缘检测以获得轮廓
然后以某种方式将此图像数据转换为tbl_df
?我不熟悉位图数组,但答案可能就是这样的?
我们可以imager::cannyEdges
用来获取边,然后将坐标放在数据框中进行绘图.
library('ggplot2')
library('imager')
plot(boats)
Run Code Online (Sandbox Code Playgroud)
img <- cannyEdges(boats)
plot(img)
Run Code Online (Sandbox Code Playgroud)
它看起来像是img
一个4维的逻辑数组.
dim(img)
# [1] 256 384 1 3
Run Code Online (Sandbox Code Playgroud)
我只想要两个维度,所以我将丢弃两个维度.
img <- img[, , 1, 1]
img[1:8, 1:8]
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
which
可以将此矩阵转换为坐标列表.
coords <- which(img, arr.ind = T)
head(coords)
# row col
# [1,] 255 1
# [2,] 255 2
# [3,] 255 3
# [4,] 255 4
# [5,] 255 5
# [6,] 255 6
Run Code Online (Sandbox Code Playgroud)
现在它可以绘制.
df <- data.frame(x = coords[,1], y = coords[,2])
ggplot(df, aes(x, -y)) +
geom_point()
Run Code Online (Sandbox Code Playgroud)