ggsave losing unicode characters from ggplot+gridExtra

爷,独闯天下 提交于 2021-02-18 05:08:42

问题


More code than you really need, but to set the mood:

#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)

Here's what it looks like: Actual Plot

Here's what it should look like (in terms of the characters in the key; plot taken as jpeg directly from Rstudio plot window): Ideal Plot


回答1:


You have two options. One, use the cairo_pdf device instead of the default pdf in your call you ggsave, e.g.,

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

The other option would be to use expressions instead of explicit unicode characters:

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)

Although, as you can see, with the second option the formatting isn't as tight as you might like.

As to why you are experiencing this issue, according to the answer here, the pdf driver can only handle single byte encodings.

enter image description here



来源:https://stackoverflow.com/questions/28746938/ggsave-losing-unicode-characters-from-ggplotgridextra

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!