首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当将绘图保存为封装的postscript (.eps)时,r会丢失信息

当将绘图保存为封装的postscript (.eps)时,r会丢失信息
EN

Stack Overflow用户
提问于 2015-02-10 19:32:05
回答 2查看 10.9K关注 0票数 8

Lyx和Latex在.eps图像上表现出色。但是,当我从Rstudio导出一个带有平滑曲线的散点图时,点就会丢失,而该图只会用该曲线传递。

我尝试过的两种保存方法是:

  1. 在Rstudio中,从图像字段的下拉菜单中选择“导出”,并将其保存为.eps。有趣的是,这个情节出现在Rstudio预览版中,就像它应该看到的那样。
  2. 首先使用setEPS()编写绘图代码,然后是postscript(),然后是所需的维度等等,然后是使用library(ggplot2)进行的绘图调用,例如ggplot()

起初,我认为问题可能在其他地方。但后来我用Mathematica保存了一个.eps,没有问题。

我在互联网上打探了一下,发现了在R中保存.eps的其他问题,但没有人处理丢失的信息。

到底是怎么回事?

我应该提到,.eps映像器在loads中呈现的效果比任何其他格式都要好,所以我坚持使用.eps。

非常感谢你的意见,我还不能投他们一票。

编辑

据我所知,这是一个死胡同,因为每股收益不能保留透明丝带。(见评论)根据请求,我发布了突出问题的代码。

假设您有数据data <- data.frame(replicate(2,rnorm(1000)))。您想要绘制它们,但是有这么多点,所以您添加了一个透明参数。此外,您还添加了一条带有置信区间的拟合线。您的代码是:

代码语言:javascript
运行
复制
ggplot(data = data, aes(x=X1, y=X2)) +
    geom_point(alpha=0.4) +
    stat_smooth(se=T, method="lm")

看起来不错。但是,如果您试图将绘图保存为EPS,那么稍后打开保存的文件时,您将看到的只有一个空的绘图对象(除了蓝色贴合的行)。

教训是,如果你坚持每股收益,你必须关闭透明丝带。在这种情况下,设置alpha=1 (或者只是不包括它)和se=FALSE

EN

回答 2

Stack Overflow用户

发布于 2015-06-29 07:26:20

问题是EPS格式不支持透明度。

一种选择是输出到PDF,透明度得到充分支持:

代码语言:javascript
运行
复制
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的PDF。

保存高效率的PNG也是透明的,但是它不再是向量格式。

或者您可以使用export包(构建在ReporteRs包之上)导出到Powerpoint,这为您提供了完全可编辑的向量格式,并且完全支持透明性:

代码语言:javascript
运行
复制
library(export)
library(ggplot2)
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")
graph2ppt(file="plot.pptx", width=8, height=6)

编辑:如果您绑定到EPS格式,这并不真正支持半透明,您可以使用cairo_ps(),一个栅格半透明区域,但保持其余的矢量格式。在最近更新的cairo_ps()中,现在也有一个参数fallback_resolution来控制分辨率,在dpi中,半透明区域被栅格化(其余部分保持为矢量格式)。因此,您可以使用:

代码语言:javascript
运行
复制
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()

或者更短的使用export包:

代码语言:javascript
运行
复制
graph2eps(file="plot.pptx", width=8, height=6, cairo=TRUE, fallback_resolution=600)
票数 15
EN

Stack Overflow用户

发布于 2015-09-25 20:14:57

不是一个解决方案,但我发现的最短工作是将alpha设置为1,并在另一个程序中更改透明度,例如在插图中使用select,然后全部相同,然后改变所有人的透明度/不透明度。如果R能添加一个允许eps透明的特性,那就太好了.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28440254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档