ggsave从ggplot + gridExtra中丢失unicode字符

And*_*lor 11 unicode r ggplot2

比你真正需要更多的代码,但要设置心情:

#Make some data and load packages
data<-data.frame(pchange=runif(80,0,1),group=factor(sample(c(1,2,3),80,replace=T)))
library(dplyr)
library(magrittr)
library(gridExtra)
library(ggplot2)
data%<>%arrange(group,pchange) %>% mutate(num=1:80)

#Make plot that includes unicode characters
g1<-ggplot(data, aes(factor(num),pchange, fill = group,width=.4)) +
  geom_bar(stat="identity", position = "dodge") +
  theme_classic()+
  theme(axis.ticks = element_blank(), 
        axis.text.x = element_blank(),
        legend.position="right")+
  scale_y_continuous(breaks=c(0,.25,.5,.75,1))+
  xlab("")+
  scale_fill_discrete("Arbitrary Group",
                      breaks=c(1,2,3),
                      labels=c("< 1 Year", "\u2265 1 Year & \n\u2264 5 Years","> 5 Years"))


#I want to add an A below the plot (this may not be necessary for the issue, but its a part of the workflow so I thought I'd include it.
g <- arrangeGrob(plot=g1,
                 sub = textGrob("A",
                                x = .1,
                                hjust = .5,
                                vjust=-2,
                                gp = gpar(fontface = "bold",
                                          fontsize = 16,
                                          col="black")))

#Save the plot
ggsave(filename="X:/yourpath/Plot1.pdf", plot=g,
       width = 8, height = 4, units = "in", dpi = 600)
Run Code Online (Sandbox Code Playgroud)

这是它的样子: 实际情节

这是它应该是什么样子(根据键中的字符;直接从Rstudio绘图窗口中作为jpeg绘制): 理想情节

Mat*_*rde 15

你有两个选择.一,在你的通话中使用cairo_pdf设备而不是默认设备,例如,pdfggsave

library(Cairo)
ggsave(filename="X:/yourpath/Plot1.pdf", plot=g, device=cairo_pdf,
       width = 8, height = 4, units = "in", dpi = 600)
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用表达式而不是显式的unicode字符:

g<-ggplot(data, aes(factor(num),pchange, fill = group,width=.4)) +
  geom_bar(stat="identity", position = "dodge") +
  theme_classic()+
  theme(axis.ticks = element_blank(), 
        axis.text.x = element_blank(),
        legend.position="right")+
  scale_y_continuous(breaks=c(0,.25,.5,.75,1))+
  xlab("")+
  scale_fill_discrete("Arbitrary Group",
                      breaks=c(1,2,3),
                      labels=c(expression(phantom(0) < "1 Year"), 
                              expression(paste(phantom(0) >= "1 Year &", phantom(0) <= "5 Years")),
                              expression(phantom(0) > "5 Years")))



ggsave(filename="Plot1.pdf", plot=g,
       width = 8, height = 4, units = "in", dpi = 600)
Run Code Online (Sandbox Code Playgroud)

虽然,正如您所看到的,使用第二个选项,格式化并不像您想的那么紧.

至于你遇到这个问题的原因,根据这里的答案,pdf驱动程序只能处理单字节编码.

在此输入图像描述