Lyx和Latex使用.eps图像精彩地工作。但是当我从Rstudio导出带有平滑曲线的散点图时,这些点会丢失,并且只会使用曲线传递绘图。
我尝试过的两种保存方法是:
在Rstudio中,选择"导出"从图像字段的下拉菜单中保存为.eps。有趣的是,情节在Rstudio预览中应该显示。
使用setEPS()
后跟postscript()
,使用所需的尺寸依此类推,然后使用library(ggplot2)
进行情节调用,例如, ggplot()
。
起初我认为问题可能在其他地方。但后来我在Mathematica中保存了一个.eps并没有问题。
我在互联网上偷窥,发现在R中保存.eps的其他问题,但没有一个处理丢失的信息。
究竟发生了什么?
我应该提一下。在Lyx中的.eps成像器渲染比任何其他格式都要好,所以我坚持使用.eps。
非常感谢你的意见,我还不能投票给他们。
编辑
据我所知,由于EPS无法保持透明度,因此这个问题是死路一条。 (见评论。)根据要求,我发布了突出问题的代码。
假设您拥有数据data <- data.frame(replicate(2,rnorm(1000)))
。你想绘制它们,但是有很多点,所以你添加了一个透明度参数。此外,还可以添加具有置信区间的拟合线。您的代码是:
ggplot(data = data, aes(x=X1, y=X2)) +
geom_point(alpha=0.4) +
stat_smooth(se=T, method="lm")
看起来不错。但是,如果您尝试将绘图保存为EPS,则稍后打开保存文件时所看到的只是一个空的绘图对象,除了蓝色拟合线。
教训是,如果您坚持使用EPS,则必须关闭透明带。在这种情况下,请设置alpha=1
(或者不要包含它)和se=FALSE
。
答案 0 :(得分:10)
问题是R中的EPS不支持透明度。
一种选择是导出为PDF,完全支持透明度:
ggplot(data = data, aes(x=X1, y=X2)) +
geom_point(alpha=0.4) +
stat_smooth(se=T, method="lm")
dev.copy2pdf(file="plot.pdf",out.type="cairo", width=10, height=7.5)
您可以使用pdftops
,Inkscape或Adobe Illustrator将PDF转换为EPS。
保存为高分辨率PNG也适用于透明度,但当然它不再是矢量格式...
或者您可以使用包ReporteRs
导出到Powerpoint,它为您提供完全可编辑的矢量格式,同时也完全支持透明度:
library( ReporteRs )
require( ggplot2 )
data=data.frame(replicate(2,rnorm(1000)))
mydoc = pptx( )
mydoc = addSlide( mydoc, slide.layout = "Title and Content" )
myplot = ggplot(data = data, aes(x=X1, y=X2)) +
geom_point(alpha=0.4) +
stat_smooth(se=T, method="lm")
mydoc = addPlot( mydoc, function( ) print( myplot ), vector.graphic=T, offx=1,offy=0,width=10, height=7.5, fontname="Arial", pointsize=20)
writeDoc( mydoc, file = "plot.pptx" )
编辑:如果您与EPS格式相关联,而EPS格式不能真正支持半透明度,则可以使用cairo_ps()
,一个光栅化半透明区域,但将其余区域保留为矢量格式。在cairo_ps()
的最新更新中,现在还有一个参数fallback_resolution
来控制dpi中的分辨率,其中半透明区域被光栅化(其余区域保持为矢量格式)。因此,您可以使用:
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()
甚至更短:
ggsave("filename.eps", device=cairo_ps, fallback_resolution = 600)
答案 1 :(得分:2)
不是解决方案,但我发现的最短工作是将alpha设置为1并更改另一个程序中的透明度,例如在插画中使用选择,然后全部相同,然后改变所有的透明度/不透明度。如果R会添加一个允许eps透明度的功能,那将是非常好的。