相关疑难解决方法(0)

以PDF格式绘制为位图

我目前正在处理CGH数组结果,该结果涉及数以万计的点的多个图,并且我想从PDF设备的多页功能和PNG图像格式的亮度中受益。

问题在于PDF设备将这些图存储为矢量图形,因此PDF文件很大,需要几分钟才能打开。我不知道R是否可以绘制为嵌入单个PDF文件中的多个位图,因为我知道PDF格式能够处理它。

这是一个简单的示例,PDF文件约为2 Mo,而png文件约为10 Ko,所以我想要一个20 Ko左右的PDF文件。

png("test%i.png")
plot(rnorm(2e4), rnorm(2e4), pch="+", cex=0.6)
plot(rnorm(2e4), rnorm(2e4), pch="+", cex=0.6)
dev.off()

pdf("test.pdf", onefile=TRUE)
plot(rnorm(2e4), rnorm(2e4), pch="+", cex=0.6)
plot(rnorm(2e4), rnorm(2e4), pch="+", cex=0.6)
dev.off()
Run Code Online (Sandbox Code Playgroud)

pdf graphics r bitmap

6
推荐指数
2
解决办法
2352
查看次数

在 R 中为 tikzdevice 栅格化 ggplot 图像

我使用 R 分析数据,使用 ggplot 创建绘图,使用 tikzDevice 打印它们,最后使用 Latex 来创建报告。问题是由于乳胶的内存限制,具有许多点的大图会失败。我在这里找到了https://github.com/yihui/tikzDevice/issues/103一个在打印 tikz 文件之前光栅化绘图的解决方案,它允许单独打印点和文本。

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 …
Run Code Online (Sandbox Code Playgroud)

r rasterizing ggplot2 tikzdevice

5
推荐指数
1
解决办法
744
查看次数

如何光栅化ggplot的单层?

Matplotlib 允许对绘图的各个元素进行光栅化并将其保存为混合像素/矢量图形 ( .pdf)(参见例如此答案)。如何在Rwith 中实现相同的效果ggplot2


以下是一个玩具问题,我只想对geom_point图层进行光栅化。

set.seed(1)
x <- rlnorm(10000,4)
y <- 1+rpois(length(x),lambda=x/10+1/x)
z <- sample(letters[1:2],length(x), replace=TRUE)

p <- ggplot(data.frame(x,y,z),aes(x=x,y=y)) +
  facet_wrap("z") +
  geom_point(size=0.1,alpha=0.1) +
  scale_x_log10()+scale_y_log10() +
  geom_smooth(method="gam",formula = y ~ s(x, bs = "cs"))
print(p)
ggsave("out.pdf", p)
Run Code Online (Sandbox Code Playgroud)

.pdf原样保存时,Adobe reader DC 需要大约 1 秒来渲染图形。您可以在下面看到一个.png版本: 出.png

当然,通常可以通过不绘制原始数据来避免该问题

r ggplot2

5
推荐指数
1
解决办法
1698
查看次数

在pdf中组合矢量和位图图形

当将图像或热图绘制到pdf时,如下例所示,它们被保存为矢量对象,其中热图中图像或单元格中的每个像素都用正方形表示.即使在适度的分辨率下,这也会导致不必要的大文件,这些文件也会在某些设备上呈现丑陋.有没有办法让R只将图像区域保存为嵌入在pdf中的png或jpg,但保留文本,轴,anotations等作为矢量图形?

我问,因为我经常打印R图形,有时在大型海报上,并希望结合两个世界中最好的.当然,我可以将整个数字保存为高分辨率png,但不会那么优雅,或者手动组合,例如在Inkscape中,但它非常繁琐.

my.func <- function(x, y) x %*% t(y)
pdf(file="myPlot.pdf")
image(my.func(seq(-10,10,,500), seq(-5,15,,500)), col=heat.colors(100))
dev.off()
Run Code Online (Sandbox Code Playgroud)

上面代码生成的数字

感谢您的时间,想法和希望解决方案!

r

4
推荐指数
1
解决办法
870
查看次数

标签 统计

r ×4

ggplot2 ×2

bitmap ×1

graphics ×1

pdf ×1

rasterizing ×1

tikzdevice ×1