【问题标题】:Saving plot to tiff, with high resolution for publication (in R)将图保存到 tiff,以高分辨率发布(在 R 中)
【发布时间】:2010-08-29 16:36:58
【问题描述】:

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

为确保您的人物获得最佳复制质量,我们希望您能提供高分辨率文件。所有图片最好采用 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() 中的错误:图边距太大

有什么建议吗?

【问题讨论】:

  • 如何导出为 pdf/ps,然后使用 ImageMagick 或其他工具转换为 tiff?
  • 我可以 - 但同时我可能会丢失数据。此外,这里有一些我缺少的基本知识 - 我想学习它(不是吗?:))
  • 将其导出为 SVG,这样做不会有质量损失,因为它是矢量化的。您可以使用RSvgDeviceCairo 导出SVG。
  • 你还没有解释为什么你不能使用 eps - 也是一种很好用的矢量格式。这有什么问题?
  • 大家好 - 只是为了更新您,我最终使用 eps 格式发送的图。感谢大家在这方面的帮助(特别是没有回答我的问题 - 但我需要什么)

标签: r tiff


【解决方案1】:

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

例如:

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

LZW 是无损压缩格式,所以不会丢失任何数据,但肯定会减小文件大小。

【讨论】:

  • 如何在pdf(filename) 中栅格化? - - 我试过pdf(filename, compression = "lzw"),但不支持。我只需要 LaTeX 演示文稿中的数字。我应该改用 tiff 吗?
【解决方案2】:

简短回答:

这是一个庞大的文件,因为分辨率光栅文件 (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。这是封装后记。因为它是一个单页文件 PS,或 postscript,将是等效的。而且,PDF 也类似。这些都是矢量格式,本质上是相同的矢量格式(它们也可以包含光栅格式的图像,但我们忽略它)。

矢量格式文件保存有关如何绘制图像的信息,但不保存有关每个像素的信息。如果您有一个距离图像底部 0.5" 长的 x 轴 3",则矢量文件知道此描述。文件中描述了图形的每个特征。正因为如此,对于简单的绘图,在给定的图像质量下,它比任何光栅表示都要紧凑得多。此外,它可以在不损失质量的情况下扩大规模。您只需要求它以 6" x 6" 而不是 5" x 5" 的尺寸绘制图像,它还会缩放用于绘制图像组件的每个指令。因此,即使 PDF 或 EPS 文件更紧凑,它也会以最高质量打印。

发送 PDF 或 PS 文件,不用担心分辨率。

【讨论】:

  • 想要 EPS 的出版商也接受 PDF 是不正确的;转换有时可能很棘手。
  • 我已经看到这个完全相同的请求十几次或更多次,并且从未失败过。不过, eps() 可以正常工作。
  • 对我来说它曾经失败过;所以我猜这取决于技术编辑的偏好。
  • 给未来读者的说明:改变分辨率实际上并不会增加像素,如答案的第一段;默认情况下,宽度和高度设置为每英寸 480 像素。 OP的问题是分辨率没有改变大小就改变了;在 800dpi 时,尺寸为 1.67 英寸见方。 OP 更改了字体以适应,但没有更改情节的其他元素(例如点和线),因此它们看起来比应该的要大得多。要使用 tiff 格式,需要更改宽度和高度;有关详细信息,请参阅 mbq 的答案。
  • 我在解释中选择了一个固定大小的图像,它是关于光栅图像一般如何工作的,而不是关于命令本身。因此,如果图像大小保持不变并且您增加分辨率,则文件大小和像素数会增加。 OP 最初的大文件问题大约是很多像素,当它们增加图像大小时会变得更糟。
【解决方案3】:

当您增加分辨率 (res) 时,绘图的有效尺寸会减小,因此边距误差会跳出。尝试用更大的widthheight 制作更大的图片(理论上,要制作相同虚拟大小的绘图,它应该是new_(width|height)=res/72*old_(width|height)
不过,正如 romunov 所建议的,使用 ImageMagick 是一个更好的主意。你不会失去质量。

【讨论】:

    【解决方案4】:

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

    我自己也遇到了这个问题,并因此解决了这个问题:

      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"))
      })
    

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

    【讨论】:

      猜你喜欢
      • 2015-10-20
      • 2016-12-18
      • 2013-04-11
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多