当前位置: 首页 > news >正文

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

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打开)。
      在这里插入图片描述
      在这里插入图片描述
  • 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)。更高的分辨率可以提供更多的细节和更清晰的图像。
      • 矢量图:矢量图没有固定的分辨率,它们可以无损地缩放到任意分辨率。
    • 编辑灵活性:
      • 位图:位图通常是平面图像,难以修改或编辑。对位图进行编辑时,需要对每个像素进行处理。
      • 矢量图:由于矢量图使用数学公式来定义图像,因此可以轻松地修改、调整和编辑各个元素。
    • 应用领域:
      • 位图:位图常用于表达照片、实际场景和复杂的图像,如数字照片、位图图标等。
      • 矢量图:矢量图常用于需要无损缩放和编辑的图像,如图标、徽标、插图等。
        综上所述,位图适用于表达真实场景和细节丰富的图像,而矢量图适用于需要无损缩放和编辑的图像。选择使用哪种图像格式取决于具体的应用需求和使用场景。
http://www.lryc.cn/news/221495.html

相关文章:

  • Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
  • webgoat-Request Forgeries 请求伪造
  • 【flask跨域问题】解决它
  • 虚幻引擎:如何在工程里面添加插件
  • SpringCloud Alibaba 【四】Openfeign
  • 语音信号的线性预测分析、合成及MATLAB编程设计实现
  • rabbitMQ rascal/amqplib报错 Error: Unexpected close 排查
  • 一文1600字使用Postman搞定各种接口token实战(建议收藏)
  • Vue自定义组件学习笔记
  • 王道p18 第12题假设 A中的 n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素:否则输出-1
  • OpenTiny Vue 3.11.0 发布:增加富文本、ColorPicker等4个新组件,迎来了贡献者大爆发!
  • vivado查看报告和消息5
  • 基于javaweb+mysql的jsp+servlet学生成绩管理系统(管理员、教师、学生)
  • 基于卷积优化算法的无人机航迹规划-附代码
  • 科技云报道:不卷自研大模型,金山办公如何创新生成式AI?
  • 3BHE022291R0101 PCD230A 专注于制造卓越人工智能
  • 小程序 scroll-view 性能问题
  • 【移远QuecPython】EC800M物联网开发板的硬件PWM和PWM输出BUG
  • OverDraw的优化
  • 数据结构—字符串
  • inne所属公司抢注“童年时光”商标仍被冻结
  • 20231106-前端学习加载和视频球特效
  • Arrays.asList() 和 List.of() 的列表之争
  • 基于51单片机的停车场管理系统仿真电路设计
  • APIView单一资源的查看更新删除
  • UML--类图的表示
  • JVM字节码文件浅谈
  • DBever 连接trino时区问题 The datetime zone id ‘GMT+08:00‘ is not recognised
  • xlua源码分析(二)lua Call C#的无wrap实现
  • MySql优化经验分享