R/ggplot2保存图片中文字体至PDF——showtext包一文清除所有障碍

R/ggplot2保存图片中文字体至PDF——showtext包一文清除所有障碍

  • 文章概要
  • 1.问题描述
  • 2.Showtext包使用流程全注释
    • 2.1案例介绍——导入线上的谷歌字体
    • 2.2实例测试——导入本地字体,以宋体、新罗马为例
  • 3拓展-新罗马与Serif的不同
  • 4.showtext+ggsave保存图片字体大小设置

文章概要

1.解决R/ggplot2保存图片中文字体至PDF丢失问题。
2.解决新罗马字体(Times New Roman),宋体(simsun)导入失败问题。
3.熟悉并掌握showtext操作。(更新自0419)
4.解决保存字体大小问题(更新自0423)

1.问题描述

ggplot2作图后,使用ggsave保存图片中文字体丢失。经自己检查与网络搜寻,确定与保存方式无关,主要原因在于字体设置。经查询主要有两个包来解决字体,一个是extrafont,一个是showtext,推荐以及使用后者的较多,故博主选择后者。
PS:没有比对两者区别,选择相信多数人。

2.Showtext包使用流程全注释

2.1案例介绍——导入线上的谷歌字体

Showtext包的原文介绍有案例,但是对于新人友好程度不够高,本文进行全面的注释,以及实例操作进行说明。并且解决了宋体和新罗马字体无法读取的问题。

https://cran.r-project.org/web/packages/showtext/vignettes/introduction.html
showtext包作者的介绍

PS:昨天夜里大脑疲倦状态的自己用了半小时愣是没解决showtext包遇到的问题,今天早上起来很快就搞定一切~

library(tidyverse) #方便后面作图,其实只导入ggplot2也可以完成本例操作
library(showtext) #导入字体设置包# font_add_google showtext中从谷歌字体下载并导入字体的函数。
# name中的是字体名称,用于检索,必须严格对应想要字体的名字。
# family后面的是代码后面引用时的名称,自己随便起。
font_add_google(name = "Gochi Hand",family =  "gochi")
font_add_google(name = "Schoolbell",family =  "bell")
showtext_auto() # 后面字体均可以使用导入的字体# 画一个随机分布的直方图,只需关注字体设置部分即可
# 即family = ""。可以自行更改字体测试,注意要使用已导入字体。
hist(rnorm(1000),breaks = 30,col = "steelblue",border = "white",main = "",xlab = "",ylab = "")
title("Historgram of NRN",family = "bell",cex.main=2)
title(ylab="Frequency",family="gochi",cex.lab=2)
text(2,70,"N=1000 ffff",family="bell",cex = 2.5)

这个部分的代码同作者链接基本一致。但是还是要自己测试下才能说可以使用(因为自己昨天就导入宋体、新罗马总失败)

2.2实例测试——导入本地字体,以宋体、新罗马为例

说明中介绍,导入包方式如下:

font_add(family = "<family_name>", regular = "/path/to/font/file")

family中为自己后面代码引用的名字,自己随便定义。regular参数中需要制定包的路径+名称。默认路径C:\Windows\Fonts
可以使用font_paths()查看当前路径,或者添加新路径。
font_files()列出当前路径下的所有可得到的字体文件。
字体插叙结果
字体查询并没有新罗马,有宋体——“simsun.ttc”。.ttc意味着是字体安装合集,包括常规、粗体等,.ttf为单种字体,如果后缀名写错也会导入字体失败。
代码及结果
楼主头铁,找不到新罗马硬是要导入,报错如图。于是去文件中看新罗马字体路径。
新罗马路径
但是右击并没有属性。双击进入该文件
真正的字体
选中想要导入的字体,右击属性,复制名字,我选中的是常规,代码如下。

font_add("songti","simsun.ttc")
font_add("TNM","times.ttf")

导入成功。
结果如下:
新罗马与宋体
这里就可以直接用ggsave保存PDF了

3拓展-新罗马与Serif的不同

详细不同见这里

https://www.cnblogs.com/bravesunforever/p/10903035.html

楼主见到showtext包使用font_families()可以直接调用serif字体。于是比较了一下,代码如下:

font_families()
ggplot(NULL,aes(x=1,y=1))+ylim(0.5,1.0)+theme_bw()+annotate("text",x=0.7,y=0.7,family="serif",size=15,label="Hello,serif world")+annotate("text",x=0.7,y=0.9,family="TNM",size=15,label="Hello,TNM world")+annotate("text",x=0.7,y=0.8,family="songti",size=15,label="Hello,宋体")ggsave("字体测试1.pdf",width = 7,height = 4,dpi=96)

结果如下图,最上方为新罗马体,中间为宋体,最下方为serif。可以看出新罗马和serif还是有些不同的。
对比结果

4.showtext+ggsave保存图片字体大小设置

真是气死个人,ggsava保存至PNG图片后,字体大小失调,经测试有两种解决方案。
字体大小
1.原PNG分辨率设置为600,在使用Showtext包时会失效,设置为90可以。
2.设置保存格式为PDF。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31407.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rstudio读取csv文件

读取csv文件老是失败&#xff0c;就一直在社区找方法&#xff0c;结合了多篇文章&#xff0c;终于成功&#xff0c;我谢 错误类型&#xff1a; 1、Error in file(file, "rt", encoding fileEncoding) : cannot open the connection In addition: Warning message…

利用R处理PDF文件

pdftools pdftools是一个专门用来处理pdf文件的包 pdftools pdf_text() pdf_text()#将pdf每页返回成(return)成一个character vector. > #举个例子 > a <- pdf_text("41375_2012_BFleu2012127_MOESM29_ESM.pdf") > #查看pdf页数 > length(a) [1] 2…

R语言NetCDF格式数据的读写

常用函数&#xff1a; nc_open 打开.nc文档 nc_close 关闭.nc文档 nc_create 新建.nc文档 ncvar_get 读取变量数据 ncatt_get 读取变量属性 ncvar_def 设定变量 ncdim_def 设定维度 ncvar_add 添加变量 ncvar_put 写入变量数据 ncatt_put 写入变量属性 一、读取.nc格…

R语言中的导出为pdf文件或txt文件的注意事项

最近看了下R语言的书&#xff0c;练练手发现一些问题 比如保存图像为pdf文件&#xff0c;我一开始老是显示文件为不含页面&#xff0c;后来才想清楚其中的道理 首先输入 pdf("mypdf.pdf") 然后用source执行一段脚本 source("script2.R") 如果你前面没…

chatgpt赋能Python-pythonmean

Pythonmean: 为什么它是新时代最炙手可热的框架&#xff1f; 什么是Pythonmean&#xff1f; Pythonmean是一个全平台支持的JavaScript全栈框架&#xff0c;其核心框架是AngularJS、Node.js、Express.js和MongoDB的组合。Pythonmean提供了一个快速、统一、易于维护的开发框架&…

chatgpt赋能Python-pythonmul

Pythonmul——让Python更加高效的优化工具 Python是一种被广泛应用于数据分析、科学计算、人工智能等各个领域的高级编程语言。由于其简单易学、灵活多样的编程风格以及庞大的社区支持&#xff0c;Python成为了许多开发者的首选语言。但是&#xff0c;Python在执行某些操作时可…

chatgpt赋能python:Python如何删除列表中的重复数据

Python如何删除列表中的重复数据 介绍 Python是一种高级编程语言&#xff0c;可用于开发各种类型的应用程序&#xff0c;包括网站&#xff0c;桌面应用程序&#xff0c;数据分析和机器学习。在Python编程中&#xff0c;经常需要对列表中的数据进行操作。有时候&#xff0c;我…

chatgpt赋能python:使用Python快速提取重复元素的方法

使用Python快速提取重复元素的方法 当我们处理数据集时&#xff0c;经常需要排重操作&#xff0c;以保证数据的准确性和完整性。而Python作为一种常用的编程语言&#xff0c;具有处理数据的优势和快速性&#xff0c;今天我们将介绍使用Python快速提取重复元素的方法。 什么是…

chatgpt赋能python:Python中如何去掉重复项

Python中如何去掉重复项 在Python的编程中&#xff0c;常常会遇到需要去掉重复项的情况。重复项的存在会极大地影响程序的效率和准确性。在本篇文章中&#xff0c;我们将讨论Python中如何去掉重复项&#xff0c;包括使用set()函数、使用列表推导式和使用字典的方法。这些方法都…

chatgpt赋能python:Python一直重复执行怎么写

Python一直重复执行怎么写 如果你用过Python&#xff0c;你可能知道它是一种用于编写Web应用程序&#xff0c;自动化脚本和大数据分析的多功能编程语言。然而&#xff0c;当你编写这些应用程序时&#xff0c;你可能需要重复执行某些代码块。在这篇文章中&#xff0c;我们将探讨…

chatgpt赋能Python-pythonpow

PythonPow&#xff1a;一个强大的Python库 PythonPow是一个强大的Python库&#xff0c;可以帮助开发者在Python中更轻松地实现各种功能。本文将介绍PythonPow的特点和优势&#xff0c;并探讨如何使用PythonPow提高编程效率。 PythonPow的特点 PythonPow的特点主要包括以下几…

chatgpt赋能python:Python如何删除重复值

Python如何删除重复值 介绍 Python是一种高级编程语言&#xff0c;广泛用于各种领域。随着数据量越来越大&#xff0c;处理数据的需求也越来越大&#xff0c;其中一个常见的问题是如何删除重复的值。在Python中&#xff0c;删除重复值可以使用一些方法&#xff0c;本文将介绍…

chatgpt赋能python:Python中寻找不重复字符的方法

Python中寻找不重复字符的方法 Python是一种著名界面友好、易学易用且功能强大的编程语言&#xff0c;广泛应用于各种需求中。在本篇文章中&#xff0c;我们将会讨论如何使用Python编程语言来寻找一个字符串中的不重复字符。我们将简单介绍如何实现这个过程以及为什么这个过程…

chatgpt赋能python:Python中如何重复一段代码

Python中如何重复一段代码 在Python编程中&#xff0c;我们经常会遇到需要重复执行一段代码的情况。有些初学者可能会采用CtrlC和CtrlV的复制粘贴方式&#xff0c;或是手动多次调用同一个方法的方式来达到重复执行的目的。但其实Python提供了简单有效的方法来实现代码重复执行…

chatgpt赋能python:Python列表去除重复项的方法

Python列表去除重复项的方法 Python 中的列表是常用的数据类型&#xff0c;在实际项目中大量使用。有时候&#xff0c;在列表中可能会出现重复项&#xff0c;这会影响程序的正确性和效率。因此&#xff0c;如何去除Python列表中的重复项成为一个常见的需求。 本文将介绍 Pyth…

探索ChatGPT:了解语言模型在对话系统中的应用

第一章&#xff1a;引言 在当今数字化时代&#xff0c;人工智能技术的迅猛发展使得对话系统成为一个备受关注的领域。随着语言模型的进步&#xff0c;像ChatGPT这样的模型正在改变我们与计算机进行交流的方式。本文将探索ChatGPT作为一种语言模型在对话系统中的应用&#xff0…

当大语言模型遇上扩散模型(一、简要介绍)

当大语言模型遇上扩散模型&#xff08;一、简要介绍&#xff09; 文章目录 当大语言模型遇上扩散模型&#xff08;一、简要介绍&#xff09;总览正文资源汇总 总览 本系列文章对近期学习的大语言模型&#xff08;LLM&#xff09;和扩散模型&#xff08;Diffusion Model&#x…

AI平台Bard、文心一言、New Bing介绍

提起ai产品&#xff0c;大家用的多的&#xff0c;可能还是chatgpt,今天&#xff0c;让我们来了解下另外几款&#xff1a; 一、谷歌公司推出的Bard: https://bard.google.com/ 缺点就是&#xff1a;目前只支持英文提问&#xff1a; 还是具备一定的上写文的能力的&#xff0c;比如…

ChatGPT:你的聊天新伙伴,提供无尽的欢乐时光!

ChatGPT丨小智ai丨chatgpt丨人工智能丨OpenAI丨聊天机器人丨AI语音助手丨GPT-3.5丨OpenAI ChatGPT|GPT-4|GPT-3|人机对话|ChatGPT应用|小智ai|小智ai|小智ai|小智ai|小智AI|chatgpt小智AI 引言&#xff1a; 无论你是在寂寞的夜晚需要伴侣&#xff0c;还是在烦恼的时刻需要倾诉…

吓哭了,看片片被警察问候了~

推荐阅读&#xff1a;突然曝出降薪&#xff01;幅度5000至10000&#xff1f; 前几天刷知乎&#xff0c;看到一个很意思的问题&#xff01;浏览量高达1800万&#xff0c;说明大家对这类话题还是比较关注的。 这里大家整理一些网友的回答&#xff0c;仅供参考。 匿名用户 A 回复 …