【发布时间】:2021-04-23 11:47:50
【问题描述】:
我正在尝试将 R 绘图保存为 EPS 文件,但绘图的以下组件存在问题 - 灰色透明多边形(透明黑色 = 灰色效果):
polygon(x.polygon, y.polygon.6, col="#00000022", border=NA)
当将绘图保存为 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()
【问题讨论】:
-
EPS 确实不支持透明度。我们需要更多背景信息来提出合理的替代方案。如果你只是想在白色背景上模仿与透明黑色相关的颜色,这不会那么难,但如果你背后有不同的物体,那就很难了。
-
PostScript 语言不支持透明度,除了像图像蒙版(和蒙版图像)和叠印这样的小事。如果您需要将其作为 PostScript(或 EPS),则必须将其渲染为图像。
-
基本上我所拥有的是一个时间序列的趋势,8条曲线,然后是由多边形表示的叠加置信带“区域”。
-
完整代码在我上面的问题的编辑版本中
-
可能使用非标准扩展。 Ghostscript 有一个非标准的操作符来设置光栅,它可以让你做一些有限数量的混合颜料。当然,由于它是非标准的,它不会在所有解释器上都可用,因此它限制了您的可移植性。对于您的工作流程,这似乎还需要您修改 postscript 生成器或以某种方式对输出进行后处理;并非不可能,但经过进一步思考会变得更加复杂。
标签: r plot transparency postscript