首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将图像转换为ggplot2散射图的点数据

如何将图像转换为ggplot2散射图的点数据
EN

Stack Overflow用户
提问于 2018-01-25 10:53:30
回答 1查看 608关注 0票数 8

我最近发现了一个吉特布包裹,开发人员分析了由安东尼奥·普罗希亚斯( Antonio Prohias )在“疯狂杂志”( Mad Magazine )上出现的248个间谍对间谍漫画系列的粉丝策划数据。

他进行了一些基本的探索性数据分析,计算出黑人间谍获胜的净得分,然后进行非参数检验(沃尔德沃尔福威茨检验),观察其中一名间谍的连续胜利,以确定普罗哈斯是否通过逆转先前的结果来保持得分平衡,或者他是否可能选择了最爱的人。

虽然我发现这是一个有趣的练习,我最感兴趣的间谍阴谋。

间谍图的点数据实际上来自一个MATLAB复活节彩蛋 spy()包,开发人员将这个点数据作为蒂布尔::特里布放入R中。

我的问题是,如何从图像中创建点数据?是否可以做imager()来获得一个大纲

然后以某种方式将这些图像数据转换成tbl_df?我不熟悉位图数组,但也许答案就在于这样的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-25 11:56:43

我们可以使用imager::cannyEdges获取边缘,然后将坐标放在一个数据帧中进行绘制。

代码语言:javascript
复制
library('ggplot2')
library('imager')

plot(boats)

代码语言:javascript
复制
img <- cannyEdges(boats)
plot(img)

看起来,img是一个具有4个维度的逻辑数组。

代码语言:javascript
复制
dim(img)
# [1] 256 384   1   3

我只想要两个维度,所以我会放弃其中的两个维度。

代码语言:javascript
复制
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

which可以将此矩阵转换为坐标列表。

代码语言:javascript
复制
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

现在可以画出来了。

代码语言:javascript
复制
df <- data.frame(x = coords[,1], y = coords[,2])

ggplot(df, aes(x, -y)) +
  geom_point()

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48441119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档