之前使用ggplot2作图遇到的问题,如果图片中的文本包含罗马字符,输出为pdf的时候就显示不出来
简单的代码
library(ggplot2)
ggplot()+
#geom_point(aes(x=1,y=1))+
geom_text(aes(x=1,y=1),label="\u0251",size=10)+
geom_text(aes(x=1.5,y=1.5),label="α",size=10)+
geom_text(aes(x=1.2,y=1.2),label="Ⅰ",size=10)
image.png
Rstudio里显示是正常的,导出为pdf格式的时候
image.png
罗马数字就是显示不出来
windows10 下的字符映射表
win+R快捷键 输入 charmap
image.png
今天发现了解决办法,今天的推文在这里介绍给大家
首先这个字符映射表也是分字体的
image.png
比如这个Arial
字体下就找不到罗马数字的内容,需要到 Times New Roman
字体下才能找到罗马数字
image.png
image.png
所以使用Rstudio,用ggplot2作图的时候如果问题标签里含有罗马数字,我们必须制定文本的字体是Times New Roman
,R语言里对应的字体代码是serif
比如以下代码
library(ggplot2)
ggplot()+
geom_point(aes(x=1,y=1),size=5)+
geom_text(aes(x=1.1,y=1.1),label="\u2160",
size=10)+
geom_text(aes(x=1.2,y=1.2),label="\u216B",
size=10,
family="serif")
两个文本标签,一个制定字体,另外一个不指定
导出为pdf文件以后制定字体的就可以显示正常
image.png
这个显示不正常的也可以通过手动修改字体的形式让他显示正常
image.png
你也可以试下如下的代码
library(ggplot2)
dat<-data.frame(label=c("\u2160","\u2161","\u2162","\u2163",
"\u2164","\u2165","\u2166","\u2167",
"\u2168","\u2169","\u216A","\u216B",
"\u216C","\u216D","\u216E","\u216F"),
x=1:16,
y=1,
y1=2)
pdf(file = "abc.pdf",width = 8,height = 4,
family = "serif")
ggplot(data=dat)+
#geom_point(aes(x=1,y=1),size=5)+
geom_text(aes(x=x,y=y,label=label),size=10)+
geom_text(aes(x=x,y=y1,label=label),size=10,family="serif")
dev.off()
grDevices::cairo_pdf(filename = "abc2.pdf",
width = 8,
height = 4,
family = "serif")
ggplot(data=dat)+
#geom_point(aes(x=1,y=1),size=5)+
geom_text(aes(x=x,y=y,label=label),size=10)+
geom_text(aes(x=x,y=y1,label=label),size=10,family="serif")
dev.off()