저는 R을 사용하여 데이터를 분석하고, ggplot을 사용하여 플롯을 만들고, tikzDevice를 사용하여 인쇄하고, 마지막으로 latex를 사용하여 보고서를 작성합니다. 문제는 라텍스의 메모리 제한으로 인해 많은 포인트가있는 큰 플롯이 실패한다는 것입니다. 여기서 https://github.com/yihui/tikzDevice/issues/103은 포인트와 텍스트를 개별적으로 인쇄 할 수있는 tikz 파일을 인쇄하기 전에 플롯을 래스터 화하는 솔루션입니다.tikzdevice 용 R의 래스터 화 ggplot 이미지
require(png)
require(ggplot2)
require(tikzDevice)
## generate data
n=1000000; x=rnorm(n); y=rnorm(n)
## first try primitive
tikz("test.tex",standAlone=TRUE)
plot(x,y)
dev.off()
## fails due to memory
system("pdflatex test.tex")
## rasterise points first
png("inner.png",width=8,height=6,units="in",res=300,bg="transparent")
par(mar=c(0,0,0,0))
plot.new(); plot.window(range(x), range(y))
usr <- par("usr")
points(x,y)
dev.off()
# create tikz file with rasterised points
im <- readPNG("inner.png",native=TRUE)
tikz("test.tex",7,6,standAlone=TRUE)
plot.new()
plot.window(usr[1:2],usr[3:4],xaxs="i",yaxs="i")
rasterImage(im, usr[1],usr[3],usr[2],usr[4])
axis(1); axis(2); box(); title(xlab="x",ylab="y")
dev.off()
## this works
system("pdflatex test.tex")
## now with ggplot
p <- ggplot(data.frame(x=x, y=y), aes(x=x, y=y)) + geom_point()
## what here?
이 예에서는 첫 번째 pdflatex
이 실패합니다. 두 번째는 래스터 화로 인해 성공합니다.
ggplot을 사용하여 어떻게 적용 할 수 있습니까?
gtable에서 플롯 패널을 추출하고 테두리없는 PNG에 그릴 수 있으며 배경 annotation_raster 또는 annotation_custom로 표시 할 수 있습니다. geom_blank 레이어를 사용하여 같은 데이터로 저울을 훈련하는 것을 잊지 마십시오. 말할 필요도없이 이것은 깨지기 쉽고 오류가 발생하기 쉽고 제한적입니다 (예 : 패싯). 특정 레이어를 래스터 화하는 ggplot + 격자 레벨 방법은 좋을 것이고 과거에는 제안되었지만 결코 끌리지는 못했습니다. – baptiste
흠, 네, 결국에는 효과가없는 많은 노력처럼 들립니다. 나는'geom_rasterise' 나'geom_point (raster = T)'와 같은 sth를 원했습니다. ;-) – Jonas
그런 논증을 건축 단계로 통과 시키지만 그리드 밭에이 저수준 능력을 요구할 것입니다. grid.cap가 유사한 기능을 제공하기 때문에 여기에 다시는별로 멀지 않은 것 같습니다. – baptiste