pdf 图表中 ggplot 透明度的最佳实践

pdf 图表中 ggplot 透明度的最佳实践

由于 Adob​​e Professional 无法展平打印一些透明图形(在此过程中崩溃了),我损失了几个小时。

我想知道是否有任何技巧可以生成包含透明对象的 PDF 图形ggplot(我的意思是使用 knitr 选项dev='pdf'),同时又可以避免预打印期间出现问题。

我不知道为什么 Acrobat Pro 无法将它们压平(是的,它们很复杂),因为它对其他图像都这样做了。我一直在尝试这些解决方案(这里和和这里) 但最后唯一可行的办法是在运行 LaTeX 之前将图像转换为 jpg。这很麻烦,因为图像中的文本当然也会被转换。

我无法使用 Acrobat Pro 打印图像,因为它无法展平它,它是这样的(我避免将代码嵌入到 knitr 块中,那么这就是纯 R 代码):

require(ggplot2)
set.seed(123)
data = data.frame(date=seq(as.Date("2001-01-01"), as.Date("2014-01-01"), "weeks"),
                  value=rnorm(679))
mean0 = rnorm(1)
mean1 = rnorm(1)
mean2 = rnorm(1)
mean3 = rnorm(1)
mean4 = rnorm(1)

line1 = as.numeric(as.Date("2012-05-01"))
line2 = as.numeric(as.Date("2013-05-01"))
line3 = as.numeric(as.Date("2007-05-01"))

plot <- ggplot(data, aes(x=as.Date(date), y=value)) + 
  geom_line(size=.25, alpha=0.7) +
  xlim(as.Date("2001-01-01"), as.Date("2014-01-01")) +
  theme(legend.position="none") +
  geom_segment(y=0.26, x=line3-30, yend=0.24, xend=line3,
               arrow=arrow(length=unit(2, "mm")), alpha=.2, colour="gray") +
  geom_segment(y=0.20, x=line1-400, yend=0.165, xend=line1-20,
               arrow=arrow(length=unit(2, "mm")), alpha=.2, colour="gray") +
  geom_segment(y=0.28, x=line2-200, yend=0.30, xend=line2-20,
               arrow=arrow(length=unit(2, "mm")), alpha=.2, colour="gray") +
  geom_segment(y=0.1, x=as.numeric(as.Date("2004-01-01",origin="1970-01-01")), yend=0.02, xend=as.numeric(as.Date("2005-01-29",origin="1970-01-01")),
               arrow=arrow(length=unit(2, "mm")), alpha=.2, colour="gray") +
  annotate("text", label="Text", y=0.1, x=as.Date("2004-01-01",origin="1970-01-01"), size=4) +
  annotate("text", label="Text", y=0.265, x=as.Date(line3,origin="1970-01-01")-30, size=4) +
  annotate("text", label="Text", y=0.20, x=as.Date(line1,origin="1970-01-01")-500, size=4) +
  annotate("text", label="Text", y=0.275, x=as.Date(line2,origin="1970-01-01")-300, size=4) +
  labs(y="Frequency",x=NULL) +
  geom_segment(aes(y=mean0, x=as.Date("2001-01-01",origin="1970-01-01"), yend=mean0, xend=as.Date("2005-01-29",origin="1970-01-01"))) +
  geom_segment(aes(y=mean1, x=as.Date("2005-01-29",origin="1970-01-01"), yend=mean1, xend=as.Date(line3,origin="1970-01-01"))) +
  geom_segment(aes(y=mean2, x=as.Date(line3, origin="1970-01-01"), yend=mean2, xend=as.Date(line1, origin="1970-01-01"))) +
  geom_segment(aes(y=mean3, x=as.Date(line1, origin="1970-01-01"), yend=mean3, xend=as.Date(line2, origin="1970-01-01"))) +
  geom_segment(aes(y=mean4, x=as.Date(line2, origin="1970-01-01"), yend=mean4, xend=as.Date("2014-01-01", origin="1970-01-01")))

pdf("nonprintable_plot.pdf", width = 4, height = 4)
grid.arrange(plot, ncol=1)
dev.off()

相关内容