我试图将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()
4条答案
按热度按时间omqzjyyz1#
虽然EPS格式本身不支持半透明,但仍然可以使用
cairo_ps()
,它可以自动光栅化半透明区域,并且可以使用参数fallback_resolution
控制执行此操作的分辨率:所有的非半透明区域,然后很好地保持为矢量图形。
或者更短,您也可以用途:
或者使用新的
export
包(CRAN上刚刚发布),使用函数导出到eps:该软件包还支持许多其他导出格式,包括Powerpoint(
graph2ppt
),参见?graph2vector
,它也保留了半透明...uqdfh47h2#
***PostScript图形模型本身根本不支持页面元素的一般透明度。***(因此EPS也不支持。)PostScript颜色都是完全 * 不透明 * 的。
绘制在另一个对象之上的对象会用自己的颜色覆盖所有较低的对象,没有为透明效果留下任何空间。(如果你在PostScript查看器或打印输出中 * 看到 * 某个 * 看起来 * 像透明覆盖的东西,那么这只是通过将两个(或更多)相应的对象展平到一个单独的光栅化区域中创建透明错觉而 * 模拟 * 的透明。)
PDF图形模型是基于PostScript的,但它在许多方面进行了扩展,增加了一些新特性,其中之一是完整对象的真实的透明性。
Adobe在PDF中添加透明度后,还为现有的PostScript语言创建了一个扩展***[1]***,该扩展能够包含PS程序中的代码,该代码将通过Distiller为***创建自 * 该PostScript的PDF***添加透明度。然而,当在屏幕上呈现或在纸张上打印包含相同代码的相同原始PostScript时,附加的透明度不会出现。并且当直接在PostScript中使用时,顶部(在PDF中透明)对象仍然会覆盖底部对象。
各种:
1.只使用PDF,不要使用EPS。
***[1]***此扩展名为
pdfmark
。在pdfmark
运算符的帮助下,您还可以向PostScript代码添加其他功能,这些功能仅在将PostScript提取为PDF时才会实现:注解、交互式表单字段和按钮、元数据、超链接等等。所有这些元素在屏幕或纸张打印上的直接PostScript渲染中都不会有任何影响。ohfgkhjo3#
我建议使用R中的
gray.colors()
函数来生成你需要的灰度,而不是用透明的黑色来生成灰色,这样你就可以在你的.eps文件中毫无问题地得到你想要的外观。0lvr5msh4#
这对我很有效