gpt4 book ai didi

r - 读取 png、添加网格和坐标以及输出的快速方法

转载 作者:行者123 更新时间:2023-12-04 09:45:45 26 4
gpt4 key购买 nike

我有很多我想要的平面图(映射)布局的 png 文件:

  1. 读入R
  2. 添加网格线
  3. 在网格中添加每个单元格的坐标
  4. 输出

这些文件有 1000 个,所以我正在寻找一种快速的方法。什么是完成此任务的快速方法。这些不需要达到出版质量,因为我正在寻找细胞内的某些行为集群,并希望为 100 帧 (png) 中的每一帧记录这些事件的协调。

这是一个生成 10 个 png 文件的 MWE:

x <- y <- seq(-4*pi, 4*pi, len = 27)
r <- sqrt(outer(x^2, y^2, "+"))

dir.create("delete_me")
wd <- getwd()
setwd("delete_me")

lapply(1:10, function(x){
png(sprintf("file_%s.png", x))
image(z = z <- cos(r^2)*exp(-r/x))
dev.off()
})

setwd(wd)

每个 png 的最终输出将如下所示(填充了所有坐标)。

我假设 grid 将是快速创建网格线的方式,但我不确定是否可以快速读取 png 或绘制坐标(假设我们将在每个 png 上使用 10 x 10 网格).

enter image description here

最佳答案

如何使用 ggplot()annotation_custom() 在整个绘图区域绘制图像,然后手动叠加网格线。

(在图片中,我预先从png文件中修剪了多余的空白和轴)

# pre-req libraries
require(ggplot2)
require(grid) # rasterGrob function
require(png) # to read the PNG file

width<-10
height<-10

# generate the points and labels for the grid
points<-data.frame(expand.grid(w=1:width,h=1:height))
points$labs<-paste0("(",points$w,",",points$h,")")
points$x<-points$w-0.5 # center
points$y<-points$h-0.5

# make the gridline co-ordinates
gridx<-data.frame(x=0:width,xend=0:width,y=rep(0,width+1),yend=rep(height,width+1))
gridy<-data.frame(x=rep(0,height+1),xend=rep(width,height+1),y=0:height,yend=0:height)
grids<-rbind(gridx,gridy)

# function to plot using ggplot with annotation_custom for the image
plotgrid<-function(file){
g<-ggplot(points)+theme_bw()+
annotation_custom(rasterGrob(readPNG(file),0,0,1,1,just=c("left","bottom")),0,width,0,height)+
geom_text(aes(x=x,y=y,label=labs))+
geom_segment(aes(x=x,xend=xend,y=y,yend=yend),data=grids) +
coord_cartesian(c(0,width),c(0,height))
return(g)
}

# run the function for each file in the folder
setwd("delete_me")
lapply(list.files(),function(x)plotgrid(x))
setwd(wd)

enter image description here

关于r - 读取 png、添加网格和坐标以及输出的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21038908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com