R语言实操记录——导出高清图片(矢量图)

R语言

R语言实操记录——导出高清图片(矢量图)


文章目录

  • R语言
  • 一、起因(废话,可跳过)
  • 二、如何在R中导出高清图片(矢量图)
    • 2.1、保存为EPS图片格式后转AI编辑
    • 2.2、保存为PDF格式(推荐)
    • 2.3、用ggplot2包的ggsave函数输出图片(非全部适用)
  • 三、矢量图与位图


一、起因(废话,可跳过)

最近需要用到环状图,照着说明书浅学了一下circlize包(网上的教程几乎全是机翻后的说明书内容,远不如直接看说明书,然说明书又太长,后续补一份文章,讲一下我自己的理解思路,方便后续生疏后可以快速上手),在成图的时候发现图片质量很差,就连坐标轴都是歪的。例如下图。
R语言实操记录——导出高清图片(矢量图)_第1张图片
附上代码:

circlize_plot = function() {
  set.seed(12345)
  sectors = letters[1:10]
  circos.initialize(sectors, xlim = c(0, 1))
  circos.track(ylim = c(0, 1), panel.fun = function(x, y) {
    circos.points(runif(20), runif(20), cex = 0.5, pch = 16, col = 2)
    circos.points(runif(20), runif(20), cex = 0.5, pch = 16, col = 3)
    circos.axis(labels.cex = 0.6)
  })
  circos.track(ylim = c(0, 1), panel.fun = function(x, y) {
    circos.lines(sort(runif(20)), runif(20), col = 4)
    circos.lines(sort(runif(20)), runif(20), col = 5)
  })
  
  for(i in 1:10) {
    circos.link(sample(sectors, 1), sort(runif(10))[1:2], 
                sample(sectors, 1), sort(runif(10))[1:2],
                col = add_transparency(col_fun(rnorm(1))))
  }
  circos.clear()
}
circlize_plot()

保存方法

png("circliz.png")
circlize_plot() #绘制图片的代码,放在pdf和dev.off中间
dev.off()

我师兄的第一反应都是让我换软件了,哈哈。但作为一个出了这么多年的软件不应该有这样的问题,我思考了一下,可能有下面几个原因。

  • 1、circlize包中可能有我未知的绘图前的需要设置的参数。
  • 2、受限于Rstudio本身的原因,图片无法展示高清细节,需要下载为高像素的图片。
    针对第一个猜测,我发现说明书中没有特别提及相关参数,为了排除代码问题,我找了一个说明书中的示例代码,跑了一遍,与说明书中的高清图片不同,我仍然得到了低质量图片,所以排除这个猜测。下图为说明书中的图片。

R语言实操记录——导出高清图片(矢量图)_第2张图片

针对第二个猜测,我去网上查询了一下,果然遇到相同问题的人不少啊。

二、如何在R中导出高清图片(矢量图)

2.1、保存为EPS图片格式后转AI编辑

  • 1、把自己的图片保存成EPS格式

    • Encapsulated Post Script (eps),是一种被封装后的文件。主要由Ai软件生成的。PS和AI均可以打开,只不过用PS打开时会将eps文件进行栅格化(像素会变到300dpi,会变糊,所以建议用AI打开)。
      R语言实操记录——导出高清图片(矢量图)_第3张图片
      R语言实操记录——导出高清图片(矢量图)_第4张图片
  • 2、得到保存的EPS图片,用Adobe Illustrator (AI)打开
    R语言实操记录——导出高清图片(矢量图)_第5张图片

  • 3、在AI中可以编辑,保存成自己想要的格式
    R语言实操记录——导出高清图片(矢量图)_第6张图片

2.2、保存为PDF格式(推荐)

  • 直接导出为PDF格式,也可以得到导出pdf的矢量图,后续想要编辑,还是转到AI中打开。
pdf("circliz.pdf")
circlize_plot() #绘制图片的代码,放在pdf和dev.off中间
dev.off()

R语言实操记录——导出高清图片(矢量图)_第7张图片

2.3、用ggplot2包的ggsave函数输出图片(非全部适用)

  • 相较于base中提供的保存图片函数,ggsave函数的功能更强,可以设置长宽和分辨率(dpi)大小及保存的格式等,自然可以获得高清图片。可惜的是并非所有函数生成的图片都适用于ggsave函数保存(例如circlize包绘制的图形就不行)。
library(ggplot2)
ggsave(filename, polt, width=  ,height=  ,dpi= )

三、矢量图与位图

  • 其实最开始我获得的图片是位图(Bitmap),由一个个像素点构成,所以放大后才看起来不连贯。后续获得的高清图片则是矢量图(Vector),也称为面向对象的图像或绘图图像,在数学上定义为一系列由点连接的线。由于图像是由数学公式描述的,可以根据需要重新生成,所以矢量图可以进行无损缩放

  • 位图和矢量图是两种常见的图像表示方法,它们有一些明显的区别。下面是位图和矢量图之间的主要区别:

    • 定义方式:
      • 位图:由像素(Pixel)组成的网格,每个像素都有自己的颜色值。图像被分成许多小的方块,每个方块称为像素。
      • 矢量图:使用数学公式描述图像,通过定义线段、曲线、形状等来创建图像。
    • 缩放性:
      • 位图:在缩放时,位图会失去一定的精度。当放大位图时,边缘变得锯齿状,而缩小位图时,细节可能会丢失。
      • 矢量图:矢量图可以无损地进行缩放,因为图像是由数学公式描述的,可以根据需要重新生成。
    • 文件大小:
      • 位图:文件大小取决于像素的数量和颜色深度。由于每个像素都需要存储颜色信息,位图文件通常比较大。
      • 矢量图:矢量图文件通常相对较小,因为它们仅存储对象的描述和属性,而不存储每个像素的颜色信息。
    • 分辨率:
      • 位图:位图具有特定的分辨率,表示为每英寸的像素数(DPI)。更高的分辨率可以提供更多的细节和更清晰的图像。
      • 矢量图:矢量图没有固定的分辨率,它们可以无损地缩放到任意分辨率。
    • 编辑灵活性:
      • 位图:位图通常是平面图像,难以修改或编辑。对位图进行编辑时,需要对每个像素进行处理。
      • 矢量图:由于矢量图使用数学公式来定义图像,因此可以轻松地修改、调整和编辑各个元素。
    • 应用领域:
      • 位图:位图常用于表达照片、实际场景和复杂的图像,如数字照片、位图图标等。
      • 矢量图:矢量图常用于需要无损缩放和编辑的图像,如图标、徽标、插图等。
        综上所述,位图适用于表达真实场景和细节丰富的图像,而矢量图适用于需要无损缩放和编辑的图像。选择使用哪种图像格式取决于具体的应用需求和使用场景。

你可能感兴趣的:(R语言,r语言,开发语言)