R 的 tikzDevice 如何处理光栅图像?
How does R's tikzDevice deal with raster images?
我读过,如果 tikz 拍摄光栅图像,它将存储为 png。有了它,tikz 生成了它周围的其余图形,并再次将光栅图像包含在最终的 tex 文件中。
现在我有以下内容:
pic <- T
if(pic)
{
tikz(file=paste(plotpath,"Rohdaten_S1_S2_D21.tex",sep=""),width=width,height=height,engine = "pdftex",)
#png(filename=paste(plotpath,"Rohdaten_S1_S2_D6.png",sep=""),width=width,height=height,res=res,units="in")
par(mfrow=c(2,1),mar=c(1.1,3,2,0),mgp=c(1.5,0.5,0),ps=f.size,cex=1,xaxt="n")
}
if(!pic) par(mfrow=c(2,1),mar=c(1,4,3,0))
for(i in 1:2)
{
x <- sensors[[i]]$time
y <- sensors[[i]]$depth
z <- sensors[[i]]$velo
image(x,y,z)
# plot.image(x,y,z
# ,xlim=c(max(x)-400,max(x)),zlim=2*c(-1,1)
# ,xlab="",ylab="$d/\mathrm{m}$",zlab="$v/(\mathrm{mm/s})$"
# ,z.adj=c(0,0),ndz=5,z.cex=1
# )
abline(v=(1:10)/0.026+par("usr")[1],lty=2)
if(!pic) abline(h=(1:floor(max(y/0.02)))*0.02)
mtext(text=paste("Sensor",i),side=3,line=0.1,adj=0)
par(mar=c(3,3,0.1,0),xaxt="s")
}
title(xlab="t/s")
if(pic) dev.off()
即使是简单的 image() 函数也会生成一个 100MB 的大 .tex 文件。
没有生成 png,所有内容都在 .tex 文件中?!
我做错了什么?是否有一个开关要设置为真?我需要做什么才能将光栅图像与漂亮的文本分开。
感谢您的帮助。
解决方案非常简单,但并不明显。
R
中的 image()
-函数在第一个中生成矢量图形
实例。有一个开关 image(...,useRaster = T)
可以强制 image()
-函数生成光栅图形。
image()
-函数方面是一个规则的网格(二次像素)。否则会出错。
如何得到规则的网格?
假设您有一个坐标为 x[],y[] 和标量矩阵 z[] 的图像。然后可以计算出重新采样的规则网格:
x.new<-seq(min(xlim),max(xlim),length.out=dim.max[1])
y.new<-seq(min(ylim),max(ylim),length.out=dim.max[2])
z<-apply(z,2,function(y,x,xout) return(approx(x,y,xout=xout+min(diff(x))/2,method="constant",rule=2)$y),x,x.new)
z<-t(apply(z,1,function(y,x,xout) return(approx(x,y,xout=xout+min(diff(x))/2,method="constant",rule=2)$y),y,y.new))
tikz(file ='a.tex',width = 2, height = 2)
image(x,y,z,useRaster = T)
dev.off()
重要的是 method = "constant"
和 approx()
函数中的 rule = 2
语句。这些使 "shifting" 成为常规网格。
应用所有这些和 tikz()
会将图片拆分为 a.tex 文件和 a_ras1.png 文件。
希望对sombody编程R
以及使用tikzDevice为tex文档生成图片有所帮助
我读过,如果 tikz 拍摄光栅图像,它将存储为 png。有了它,tikz 生成了它周围的其余图形,并再次将光栅图像包含在最终的 tex 文件中。
现在我有以下内容:
pic <- T
if(pic)
{
tikz(file=paste(plotpath,"Rohdaten_S1_S2_D21.tex",sep=""),width=width,height=height,engine = "pdftex",)
#png(filename=paste(plotpath,"Rohdaten_S1_S2_D6.png",sep=""),width=width,height=height,res=res,units="in")
par(mfrow=c(2,1),mar=c(1.1,3,2,0),mgp=c(1.5,0.5,0),ps=f.size,cex=1,xaxt="n")
}
if(!pic) par(mfrow=c(2,1),mar=c(1,4,3,0))
for(i in 1:2)
{
x <- sensors[[i]]$time
y <- sensors[[i]]$depth
z <- sensors[[i]]$velo
image(x,y,z)
# plot.image(x,y,z
# ,xlim=c(max(x)-400,max(x)),zlim=2*c(-1,1)
# ,xlab="",ylab="$d/\mathrm{m}$",zlab="$v/(\mathrm{mm/s})$"
# ,z.adj=c(0,0),ndz=5,z.cex=1
# )
abline(v=(1:10)/0.026+par("usr")[1],lty=2)
if(!pic) abline(h=(1:floor(max(y/0.02)))*0.02)
mtext(text=paste("Sensor",i),side=3,line=0.1,adj=0)
par(mar=c(3,3,0.1,0),xaxt="s")
}
title(xlab="t/s")
if(pic) dev.off()
即使是简单的 image() 函数也会生成一个 100MB 的大 .tex 文件。 没有生成 png,所有内容都在 .tex 文件中?!
我做错了什么?是否有一个开关要设置为真?我需要做什么才能将光栅图像与漂亮的文本分开。
感谢您的帮助。
解决方案非常简单,但并不明显。
R
中的image()
-函数在第一个中生成矢量图形 实例。有一个开关image(...,useRaster = T)
可以强制image()
-函数生成光栅图形。image()
-函数方面是一个规则的网格(二次像素)。否则会出错。
如何得到规则的网格?
假设您有一个坐标为 x[],y[] 和标量矩阵 z[] 的图像。然后可以计算出重新采样的规则网格:
x.new<-seq(min(xlim),max(xlim),length.out=dim.max[1])
y.new<-seq(min(ylim),max(ylim),length.out=dim.max[2])
z<-apply(z,2,function(y,x,xout) return(approx(x,y,xout=xout+min(diff(x))/2,method="constant",rule=2)$y),x,x.new)
z<-t(apply(z,1,function(y,x,xout) return(approx(x,y,xout=xout+min(diff(x))/2,method="constant",rule=2)$y),y,y.new))
tikz(file ='a.tex',width = 2, height = 2)
image(x,y,z,useRaster = T)
dev.off()
重要的是 method = "constant"
和 approx()
函数中的 rule = 2
语句。这些使 "shifting" 成为常规网格。
应用所有这些和 tikz()
会将图片拆分为 a.tex 文件和 a_ras1.png 文件。
希望对sombody编程R
以及使用tikzDevice为tex文档生成图片有所帮助