Opo*_*sum 12 plot transparency r postscript
我试图将R图保存为EPS文件,但我对图的以下组件有问题 - 灰色透明多边形(透明黑=灰色效果):
polygon(x.polygon, y.polygon.6, col="#00000022", border=NA)
Run Code Online (Sandbox Code Playgroud)
将这个代码保存为PDF而不是EPS时,这行代码可以正常工作.看起来EPS不支持透明度?我还有其他选择吗?
以下是完整情节的代码:
postscript(file="Figure.eps", width=5.5, height=5.5, onefile=F, horizontal=F)
ts(t(data.frame(initial_timepoint, second_timepoint, third_timepoint, final_timepoint)))->obj
obj[,-c(3,7)]->obj1
plot(obj1, plot.type="single", lwd=0.6, xaxs="i",yaxs="i",xlab="",ylab="LV ejection fraction (%)",xaxt='n',yaxt='n',ylim=c(0,70),col="black")
axis(1, at=c(1,2,3,4), labels=c("1","2","3","4"),cex.axis=1)
axis(2, at=seq(0,70,10), labels=c("0%","10%","20%","30%","40%","50%","60%","70%"),cex.axis=1, las=1)
abline(v=c(2,3),lwd=0.6,lty=2)
stderr <- function(x) sqrt(var(x,na.rm=TRUE)/length(na.omit(x)))
avg<-c(mean(initial_timepoint,na.rm=T), mean(second_timepoint,na.rm=T), mean(third_timepoint,na.rm=T), mean(final_timepoint,na.rm=T))
err<-c(stderr(initial_timepoint), stderr(second_timepoint), stderr(third_timepoint), stderr(final_timepoint))
my.count <- c(1,2,3,4)
my.count.rev <- c(4,3,2,1)
y.polygon.6 <- c((avg+err*1.96)[my.count],(avg-err*1.96)[my.count.rev])
x.polygon <- c(my.count, my.count.rev)
polygon(x.polygon, y.polygon.6, col="#00000022", border=NA)
lines(avg,col="black",lwd=0.8,lty=3)
lines((avg+err*1.96),lwd=0.8,lty=3)
lines((avg-err*1.96),lwd=0.8,lty=3)
dev.off()
Run Code Online (Sandbox Code Playgroud)
Tom*_*ers 14
虽然EPS格式本身不支持半透明,但仍然可以使用cairo_ps()
,自动光栅化半透明区域,并且可以使用参数控制执行此操作的分辨率fallback_resolution
:
cairo_ps(file = "test.eps", onefile = FALSE, fallback_resolution = 600)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7))
dev.off()
Run Code Online (Sandbox Code Playgroud)
所有非半透明区域都可以很好地保留为矢量图形.
或者甚至更短,你也可以使用:
ggsave("filename.eps", device=cairo_ps, fallback_resolution = 600)
Run Code Online (Sandbox Code Playgroud)
或者使用函数导出到eps,使用export
刚出现在CRAN上的新包:
install.packages("export")
library(export)
graph2eps("filename.eps", fallback_resolution = 600)
Run Code Online (Sandbox Code Playgroud)
该软件包还支持许多其他导出格式,包括Powerpoint(graph2ppt
),参见?graph2vector
,它也保留了半透明...
PostScript图形模型本身根本不支持页面元素的一般透明度.(因此EPS也不可能.)PostScript颜色都是完全不透明的.
在另一个对象上绘制的对象将覆盖并覆盖具有自己颜色的所有下部对象,从而没有透明效果的空间.(如果你看到的东西,看起来像透明叠加在PostScript查看器或打印输出,那只是模拟透明度,由两个(或更多)各自的对象压扁成一个单一的光栅化区域创造具有透明度的假象.)
PDF图形模型基于PostScript,但它在各个方面进行了扩展,增加了几个新功能.其中之一是完整对象的真实透明度.
在Adobe为PDF添加透明度后,它还为现有的PostScript语言创建了一个扩展[1],该语言能够在PS程序中包含代码,这将通过Distiller 为从此PostScript 创建的PDF增加透明度.但是,当在屏幕上渲染或在纸上打印包含相同代码的相同原始PostScript时,不会出现额外的透明度,并且当直接在PostScript中使用时,顶部(PDF中的透明)对象仍将覆盖底部对象.
我还有其他选择吗?
多种:
仅使用PDF.不要使用EPS.
如果必须使用EPS,请使用两步过程:
[1]调用此扩展名pdfmark
.在pdfmark
操作员的帮助下,还可以为PostScript代码添加其他功能,这些功能仅在将此PostScript提取为PDF时实现:注释,交互式表单域和按钮,元数据,超链接等.所有这些元素都不会对屏幕上或纸质打印件上的直接PostScript渲染产生任何影响.