R语言
R语言实操记录——导出高清图片(矢量图)
文章目录
- R语言
- 一、起因(闲聊,可跳过)
- 二、如何在R中导出高清图片(矢量图)
- 2.1、保存为EPS图片格式后转AI编辑
- 2.2、保存为PDF格式(推荐)
- 2.3、用ggplot2包的ggsave函数输出图片(非全部适用)
- 三、矢量图与位图
一、起因(闲聊,可跳过)
最近需要用到环状图,照着说明书浅学了一下circlize包(网上的教程几乎全是机翻后的说明书内容,远不如直接看说明书,然说明书又太长,后续补一份文章,讲一下我自己的理解思路,方便后续生疏后可以快速上手),在成图的时候发现图片质量很差,就连坐标轴都是歪的。例如下图。
附上代码:
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.1、保存为EPS图片格式后转AI编辑
-
1、把自己的图片保存成EPS格式
- Encapsulated Post Script (eps),是一种被封装后的文件。主要由Ai软件生成的。PS和AI均可以打开,只不过用PS打开时会将eps文件进行栅格化(像素会变到300dpi,会变糊,所以建议用AI打开)。
- Encapsulated Post Script (eps),是一种被封装后的文件。主要由Ai软件生成的。PS和AI均可以打开,只不过用PS打开时会将eps文件进行栅格化(像素会变到300dpi,会变糊,所以建议用AI打开)。
-
2、得到保存的EPS图片,用Adobe Illustrator (AI)打开
-
3、在AI中可以编辑,保存成自己想要的格式
2.2、保存为PDF格式(推荐)
- 直接导出为PDF格式,也可以得到导出pdf的矢量图,后续想要编辑,还是转到AI中打开。
pdf("circliz.pdf")
circlize_plot() #绘制图片的代码,放在pdf和dev.off中间
dev.off()
2.3、用ggplot2包的ggsave函数输出图片(非全部适用)
- 相较于base中提供的保存图片函数,ggsave函数的功能更强,可以设置长宽和分辨率(dpi)大小及保存的格式等,自然可以获得高清图片。可惜的是并非所有函数生成的图片都适用于ggsave函数保存(例如circlize包绘制的图形就不行)。
library(ggplot2)
ggsave(filename, polt, width= ,height= ,dpi= )
三、矢量图与位图
-
其实最开始我获得的图片是位图(Bitmap),由一个个像素点构成,所以放大后才看起来不连贯。后续获得的高清图片则是矢量图(Vector),也称为面向对象的图像或绘图图像,在数学上定义为一系列由点连接的线。由于图像是由数学公式描述的,可以根据需要重新生成,所以矢量图可以进行无损缩放
-
位图和矢量图是两种常见的图像表示方法,它们有一些明显的区别。下面是位图和矢量图之间的主要区别:
- 定义方式:
- 位图:由像素(Pixel)组成的网格,每个像素都有自己的颜色值。图像被分成许多小的方块,每个方块称为像素。
- 矢量图:使用数学公式描述图像,通过定义线段、曲线、形状等来创建图像。
- 缩放性:
- 位图:在缩放时,位图会失去一定的精度。当放大位图时,边缘变得锯齿状,而缩小位图时,细节可能会丢失。
- 矢量图:矢量图可以无损地进行缩放,因为图像是由数学公式描述的,可以根据需要重新生成。
- 文件大小:
- 位图:文件大小取决于像素的数量和颜色深度。由于每个像素都需要存储颜色信息,位图文件通常比较大。
- 矢量图:矢量图文件通常相对较小,因为它们仅存储对象的描述和属性,而不存储每个像素的颜色信息。
- 分辨率:
- 位图:位图具有特定的分辨率,表示为每英寸的像素数(DPI)。更高的分辨率可以提供更多的细节和更清晰的图像。
- 矢量图:矢量图没有固定的分辨率,它们可以无损地缩放到任意分辨率。
- 编辑灵活性:
- 位图:位图通常是平面图像,难以修改或编辑。对位图进行编辑时,需要对每个像素进行处理。
- 矢量图:由于矢量图使用数学公式来定义图像,因此可以轻松地修改、调整和编辑各个元素。
- 应用领域:
- 位图:位图常用于表达照片、实际场景和复杂的图像,如数字照片、位图图标等。
- 矢量图:矢量图常用于需要无损缩放和编辑的图像,如图标、徽标、插图等。
综上所述,位图适用于表达真实场景和细节丰富的图像,而矢量图适用于需要无损缩放和编辑的图像。选择使用哪种图像格式取决于具体的应用需求和使用场景。
- 定义方式: