将绘图保存为tiff,具有高分辨率用于发布(在R中)

时间:2010-08-29 16:36:58

标签: r tiff

我们发送文章的期刊要求提供以下内容:

  

为了确保您的数字的最佳复制质量,我们将欣赏高分辨率文件。所有数字最好应采用TIFF或EPS格式......并应具有以下分辨率:
  图表:800 - 1200 DPI
  照片:400 - 800 DPI
  颜色(仅CMYK):300 - 400 DPI(DPI =每英寸点数)

由于我正在发送图表,因此我尝试使用tiff保存它。

以下是我正在使用的代码:

tiff(filename = "c:\\aaa.tiff", 
     res = 800, pointsize = 2)
plot(1:100)
dev.off()    

但遗憾的是,它会产生一个非常“笨重”的图像 - 如果我不在哪里使用pointsize = 2,我会收到错误消息:

  

plot.new()出错:数字边距太大

有什么建议吗?

4 个答案:

答案 0 :(得分:28)

您应该做的一件事是使用压缩参数。

例如:

tiff("outfile.tif", compression = "lzw")

LZW是一种无损压缩格式,因此您不会丢失任何数据,但您肯定会减少文件大小。

答案 1 :(得分:18)

简短回答:

这是一个庞大的文件,因为分辨率光栅文件(TIFF)越高,文件就越大。

另一种选择,EPS,就像PDF或PS。只需保存其中任何一个。这是一种矢量图像格式,他们说可以接受。它将更紧凑,质量更高(除非你的数字包含大量的点或线。)

答案很长:

他们要求的一种格式是TIFF,一种栅格格式。它将信息保存为表示图像中每个像素的值。如果图像是100 DPI和5“方形,那么它是500x500,它可以节省250000像素的信息。随着图像分辨率的提高和图像尺寸保持不变,所需的信息点也会增加。在200 DPI时它是1000x1000并且1e6像素的信息。这解释了为什么你的文件太笨重了。

为了获得5“平方的高质量打印图像,您需要大约300-400 DPI(每英寸点数)。这样您就不会看到构成图像的每个单独的小像素。如果是在较低的分辨率下,图像仍然是5“x 5”,但构成图像的每个单独的方块(像素)都很大,你可以看到它们。这就是为什么他们要求分辨率。否则,你的文字和线条图形会出现块状,锯齿状或模糊。这就是为什么计算机屏幕上的文字(目前只有100 DPI左右)的质量不如纸张上打印的那么高(通常至少300 dpi)。

他们要求的另一种格式是EPS。这是封装的postscript。因为它是单页文件PS或postscript,所以相同。而且,PDF也类似。这些都是矢量格式,基本上是相同的矢量格式(它们也可以包含栅格格式图像,但让我们忽略它)。

矢量格式文件保存有关图像绘制方式的信息,但不保存有关每个像素的信息。如果从图像底部有一个长3英寸的3英寸x轴,则矢量文件知道此描述。该图的每个功能都在文件中描述。因此,对于简单的绘图,它比给定图像质量的任何光栅表示都要紧凑得多。此外,它在不损失质量的情况下缩放尺寸。你只需要它以6“x 6”而不是5“x 5”绘制图像,它也会缩放每个指令以绘制图像的组成部分。因此,即使PDF或EPS文件更紧凑,它也会以最高质量打印。

发送PDF或PS文件,不要担心解决方案。

答案 2 :(得分:11)

当您增加分辨率(res)时,绘图的有效大小会减小,因此边距错误会跳出。尝试使用更大widthheight来制作更大的图片(理论上,为了制作相同虚拟大小的图,它应该是new_(width|height)=res/72*old_(width|height)
不过,正如罗莫诺夫所说,使用ImageMagick是一个更好的主意;你不会失去品质。

答案 3 :(得分:1)

我建议您使用devEval库中的R.devices

我自己有这个问题并且由于这个问题解决了它:

  options("devEval/args/path"=file.path(Folder_of_Output))
  devEval("tiff", name="Name_output", width=120, height=800, {
  barplot(data, main="imagetitle");
  legend("top", legend =c("text of legend"))
  })

对我来说,它就像一个魅力,文件直接保存没有问题。