【问题标题】:Anti-aliasing in R graphics under Windows (as per Mac)Windows 下 R 图形中的抗锯齿(根据 Mac)
【发布时间】:2011-08-26 18:17:01
【问题描述】:

有没有办法从 Windows 版本的 R 绘制抗锯齿图形?从下面的两个版本可以看出,Mac 版 R 打印图形抗锯齿....

....虽然 Windows 版本对文本进行抗锯齿处理,但它不会对实际图形进行抗锯齿处理,从竖线点和网格可以看出:

顺便说一下代码:

library(scatterplot3d) 
attach(mtcars) 
s3d <-scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
  type="h", main="3D Scatterplot")
fit <- lm(mpg ~ wt+disp) 
s3d$plane3d(fit)

我需要尽可能高质量的网页发布。我正在运行 Windows 7 并从 RBloomberg 提取数据,这仅适用于 Windows。

【问题讨论】:

    标签: r antialiasing


    【解决方案1】:

    通过 png 设备使用 Cairo 不再需要安装 cairoDevice。您现在可以在打开设备时指定type='cairo'。比较以下:

    png('test1.png', 500, 500)
    s3d <- scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
                         type="h", main="3D Scatterplot")
    fit <- lm(mpg ~ wt+disp) 
    s3d$plane3d(fit)
    dev.off()
    

    png('test2.png', 500, 500, type='cairo')
    s3d <- scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
                         type="h", main="3D Scatterplot")
    fit <- lm(mpg ~ wt+disp) 
    s3d$plane3d(fit)
    dev.off()
    

    我正在运行 Win 8.1 和 64 位 R 3.2.2。

    【讨论】:

      【解决方案2】:

      这可能取决于每个平台上渲染引擎的细节,这些细节可能很难修改。我的建议(未经测试,因为没有时间和访问 Windows):

      • 安装cairoDevice 包并使用Cairo_png()。根据文档:
       This functions the same as any other R graphics device. You may
       use the conventional plot commands and expect essentially the same
       output, except that everything is anti-aliased (similar to other
       vector-based devices like Quartz). Alpha-blending is supported, as
       is enhanced interactivity via ‘getGraphicsEvent’. The device
       should work the same across all supported platforms (Mac, Windows,
       and Linux).
      
      • 以更高的分辨率渲染 PNG(或将 R 中的数据输出为 PDF)并使用 ImageMagick (convert) 或其他工具来获得您需要的抗锯齿版本。

      【讨论】:

      • 您还可以使用 Cairo 输出为 SVG,这可能会提供出色的输出。
      • 我(终于)完成了这项工作。但是有什么方法可以从屏幕图像中保存文件或复制和粘贴,就像使用标准设备一样?谢谢。
      • 安装 cairoDevice 后,您可以简单地调用 Cairo() 来获得在 MS Windows 下抗锯齿的绘图窗口。
      【解决方案3】:

      使用矢量设备,例如 pdf。首先确保您具有该功能,因此检查capabilities 功能也就不足为奇了。如果你有 pdf,那么就这样做:

      pdf(file="out_graph.pdf")
      s3d <-scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
        type="h", main="3D Scatterplot")
      fit <- lm(mpg ~ wt+disp) 
      s3d$plane3d(fit)
      dev.off()
      

      Web 输出的替代方案可能是 png() 图形设备。尽管它是一种光栅格式,但它在紧凑性和 Web 浏览器兼容性方面获得了很高的评价。

      【讨论】:

      • @Joris ...我认为 SO 接口可能自己选择了一种格式。我不认为它需要我的 pdf 并在我上传它们时保持这种格式。 (但我在这里可能是错误的。)
      • OP 说他需要它们用于网络显示,所以他可能需要光栅格式。
      • 我会很懒,然后制作一个 pdf,然后使用 ImageMagick 将其转换为高分辨率 png。
      • @DWin :我也是这么想的,但是上图和下图的区别很明显,都是png。
      • @乔里斯。正确的。所以问题在于Win7中屏幕图形设备的默认输出。他需要将格式强制转换为其他内容或应用可提高分辨率的设置。
      猜你喜欢
      • 2011-05-16
      • 2011-05-02
      • 1970-01-01
      • 2014-07-14
      • 2010-12-26
      • 2014-02-18
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多