首页 > 其他分享 >R 学习 - 图形设置中英字体

R 学习 - 图形设置中英字体

时间:2023-07-26 15:35:03浏览次数:39  
标签:School family text 字体 设置 图形 font ttf


绘制生信宝典调查总结文中的柱状图时,出现了中文乱码,就搜索了下解决方案,记录如下。

修改图形的字体

ggplot2中修改图形字体。

# 修改坐标轴和legend、标题的字体
theme(text=element_text(family="Arial"))
# 或者
theme_bw(base_family="Arial")

# 修改geom_text的字体
geom_text(family="Arial")

ggplot2支持中文字体输出PDF

showtext包可给定字体文件,加载到R环境中,生成新的字体家族名字,后期调用这个名字设定字体,并且支持中文写入pdf不乱码

library(showtext)
showtext.auto(enable=TRUE)

font_path = "FZSTK.TTF"
font_name = tools::file_path_sans_ext(basename(font_path))
font.add(font_name, font_path)

# 修改坐标轴和legend、标题的字体
theme(text=element_text(family=font_name))

# 修改geom_text的字体
geom_text(family=font_name)

系统可用字体

  • Linux字体一般在 /usr/share/fonts下,也可以使用fc-list列出所以加载的字体。
  • Windows字体在 C:\Windows\Fonts\下,直接可以看到,也可以拷贝到Linux下使用。

合并字体支持中英文

通常情况下,作图的字体都是英文,ggplot2默认的或按需求加载一种字体就可以了。但如果中英文混合出现时,单个字体只能支持一种文字,最好的方式是合并两种字体,类似于Word中设置中英文分别使用不同的字体。

软件FontForge可以方便的合并中英文字体,其安装也比较简单,直接 yum install fontforge.x86_64

假如需要合并FZSTK.TTF (windows下获取)和Schoolbell-Regular.ttf (谷歌下载),这两个都是手写字体。按如下,把字体文件和程序脚本mergefont.pe放在同一目录下,运行fontforge -script mergefont.pe即可获得合并后的字体FZ_School.ttf

$ ls
FZSTK.TTF mergefont.pe Schoolbell-Regular.ttf
$ cat mergefont.pe
Open("FZSTK.TTF")
SelectAll()
ScaleToEm(1024)
Generate("temp.ttf", "", 0x14)
Close()

# Open English font and merge to the Chinese font
Open("Schoolbell-Regular.ttf")
SelectAll()
ScaleToEm(1024)

MergeFonts("temp.ttf")
SetFontNames("FZ_School", "FZST", "Schoolbel", "Regular", "")
Generate("FZ_School.ttf", "", 0x14)
Close()

$ fontforge -script mergefont.pe
$ ls
FZ_School.ttf FZSTK.TTF mergefont.pe Schoolbell-Regular.ttf

然后安装前面的介绍使用showtext导入即可使用。

一个示例

字体文件自己从Windows获取,School bell从Google fonts获取。

library(showtext)
## Add fonts that are available on current path

# 方正字体+schoole bell (中英混合)
font.add("FZ_School", "FZ_School.ttf")
# 黑体
font.add("simhei", "simhei.ttf")
font.add("Arial","arial.ttf")

# 黑体和Arial的合体
font.add("HeiArial", "HeiArial.ttf")
showtext.auto()  ## automatically use showtext for new devices

library(ggplot2)


p = ggplot(NULL, aes(x = 1:10, y = 2^(1:10), group=1)) + geom_line() +
  theme(axis.title.y=element_text(family="Arial"), axis.title.x=element_text(family="HeiArial"), 
        plot.title=element_text(family="simhei")) +
  xlab("Days spent on 生信宝典") + 
  ylab("Things you have learned") +
  ggtitle("生信宝典,换个角度学生信") + 
  annotate("text", 7, 300, family = "FZ_School", size = 8,
           label = "收获曲线 (Harvest curve)", angle=15) 

# annotate指定的是文字的中间部分的位置

ggsave(p, filename="example-SXBD.pdf", width = 7, height = 4)  ## PDF device

R 学习 - 图形设置中英字体_加载

Reference

生信宝典,换个角度学生信


标签:School,family,text,字体,设置,图形,font,ttf
From: https://blog.51cto.com/u_16077014/6856533

相关文章

  • VS报错error NETSDK1045: 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.
    从微软官网下载.NET6.0:https://dotnet.microsoft.com/zh-cn/download/visual-studio-sdks?cid=getdotnetsdk重启后打开VS2019仍然出现这个报错回到官网仔细查看,发现原来.NET6.0版本以上必须使用VS2022版本编译了使用VS2022打开编译,报错消失题外话:当电脑已经安装了刚好版本......
  • Spire.XLS of.net 怎么设置字体样式(普通单元格和带公式的单元格)
    普通的设置就直接套用官方文档即可//创建字体ExcelFontfont1=workbook.CreateFont();//设置字体,字形,大小,颜色font1.FontName="宋体";font1.IsBold=true;font1.Size=10;font1.KnownColor=ExcelColors.Blue;//为A1单元格......
  • RabbitMQ由于x-message-ttl设置与代码不一致导致declareQueue时IO异常
    具体异常:Causedby:com.rabbitmq.client.ShutdownSignalException:channelerror;protocolmethod:#method<channel.close>(reply-code=406,reply-text=PRECONDITION_FAILED-inequivalentarg'x-message-ttl'forqueue'queryResult'invho......
  • 博客园设置
    /*!Theme:AtelierForestLightAuthor:BramdeHaan(http://atelierbramdehaan.nl)License:~MIT(ormorepermissive)[viabase16-schemes-source]Maintainer:@highlightjs/core-teamVersion:2021.09.0*/precode.hljs{display:block;overflow-x:aut......
  • vscode 设置
    配置文件{//保存按照eslint格式化"editor.codeActionsOnSave":{"source.fixAll.eslint":true},//保存按照设置的格式化工具格式化"editor.formatOnSave":true,"editor.inlayHints.fontSize":14,"scm.inputFontSize&quo......
  • 多环境命令启动参数设置
     打包后在jar文件夹内使用cmd可以修改启动环境为test,临时的 也可以修改端口号  ......
  • python 柱状图 数值 字体
    Python柱状图:数值与字体柱状图是数据可视化中常用的一种图表类型,它能够直观地展示不同类别的数据之间的比较关系。在Python中,有多种方式可以绘制柱状图,而且可以根据需要对柱状图进行自定义,包括设置数值和字体。Matplotlib库绘制柱状图Matplotlib是Python中最常用的数据可视化库......
  • python如何对每一行设置行索引
    Python如何对每一行设置行索引在Python中,我们经常需要对数据进行处理和分析。而对于一些数据集来说,每行数据都需要有一个唯一的标识,这就是行索引。行索引通常是一个整数或字符串,用于区分不同的数据行。在本文中,我们将介绍如何使用Python对每一行设置行索引,并提供一个具体的问题场......
  • VSCode的一些设置
    设置字体大小编辑器字体变大......
  • 解决高分屏下Matlab工具栏字体过小
    能够看到工具栏,说明你已经能够打开matlab了,不管你是以何种方式打开的。首先打开matlab,然后在命令行输入一下代码:#在命令行内输入如下命令,其中2.0是放大的尺度,根据需要自行设置s=settings;s.matlab.desktop.DisplayScaleFactor;s.matlab.desktop.DisplayScaleFactor.Persona......