没有Cairo,如何使用ggplot绘制Unicode字符?

5
我希望能够在绘图中显示Unicode字符,作为混合字符串的一部分,例如 ρ=0.84,其中0.84保存在一个变量中,假设为cor.value
这实际上排除了像expressionbquote这样的解决方案(建议在这里)。我不知道它们是否单独使用会起作用,但是试图通过paste将它们与变量的值结合起来是有问题的。我唯一能让它工作的方法是实际上在我的源代码中使用Unicode符号。它甚至出现在R Studio的绘图中。
但是当我尝试打印时,我只得到了..而已。迄今为止,我找到的唯一建议是使用Cairo,但是Cairo正在损坏我的剩余绘图,所以我想坚持原始的pdf设备。
是否有可能通过使用Unicode或其他东西来打印该字符串到绘图中,而不必使用Cairo呢?
这是Cairo的示例代码(这应该是图形的一个角落,带有灰色边框): screenshot from Cairo 部分点被切断了,而不是被剪裁。因此,当它与边框叠加在一起时,边框会稍微偏移,点会“透过”边框(这里只在底部看到它,在其他地方更加明显)。底部和右侧的边框比左侧和上侧的边框更厚。在Cairo中,非常淡灰色的点后面的带子更宽。这些问题在标准的PDF设备中不存在。 Screenshot from standard 我目前正在使用Fedora 21系统,但是这份文档还必须能够在Windows 8或10上编译,并最好也能在其他Linux版本上编译。
这是绘图的代码(预计在小尺寸下查看,大约为2x1.5英寸)。当前计划是将文本放置在c.a变量中,并将其放置在轴标签的位置,但我希望保持我的选项以便稍后进行注释:
 offset.plotdata <- data.frame(understandability=c(2.95, 0.85, 0.75, 1.15, 2.25, 2.05, 1.95, 2.15, 2.25, 0.75, 2.05, 0.85), lowercase.pseudonym=c("A", "B", "C", "D", "E", "F", "A", "D", "E", "C", "F", "B"), questionnaire=c(rep("pre", 6), rep("post", 6)))
offset.plotdata$decorative.points <- c(1,2,3,4,5,NA,1,2,3,4,5,NA)
middle.blue <- "#2186D9"
variable.name <- "understandability"
cor.value <- 0.84
c.a <- "rho = 0.84"
ggplot(offset.plotdata, 
       aes_string(x="questionnaire", y=variable.name, 
                  group="lowercase.pseudonym"))+
  geom_line(colour=middle.blue)+
  ylim(c(5,0.5))+
  theme_bw()+
  theme(panel.grid.major.y = element_line( size=5, color="#f8f8f8"),
        panel.grid.minor.y=element_blank(),
        panel.grid.major.x=element_blank(),
        panel.grid.minor.x=element_blank(),
        text = element_text(size=9), 
        axis.text=element_text(size=8),
        axis.ticks.y=element_blank(),
        plot.margin = unit(c(0,5,0,0), "mm")
        #axis.title.y=element_text(margin=margin(0,20,0,0))
  )+
  labs(y="Angekreuzte Option", x=as.character(c.a))+
  scale_x_discrete(expand = c(0,0), label=c("Vorher", "Nachher"))+
  #ggtitle("gepaarte Antworten")+
  geom_point(data=offset.plotdata, 
             aes(x=questionnaire,y=decorative.points), 
             fill=middle.blue, 
             colour=middle.blue, 
             size=5)

不知道,但你能否多说一点Cairo如何破坏你绘图的其余部分?也许问题的这部分是可以修复的。另外,提供关于你的平台(操作系统和版本)的信息可能也会有帮助,因为这些问题有些是特定于平台的。 - Ben Bolker
@BenBolker 已更新。 - rumtscho
为什么想要一个包含变量存储信息的混合字符串会排除使用 expression()/plotmath?例如 cor.value <- 0.84; substitute(expression(rho=x),list(x=cor.value)) - Ben Bolker
一个完全可复现的例子会非常有帮助... - Ben Bolker
@BenBolker 我不知道substitute的用法。这是目前的图表,包含运行所需的必要数据。 - rumtscho
1个回答

2

我不知道为什么expression(...)无法正常工作(即它确实会打印希腊字母,但还会打印“expression”),而使用波浪线(~)指定表达式的快捷方式确实有效,但这个解决方案对我来说可行:

g0 <- [... the rest of the graph ...]

cor.value <- 0.84
c.a <- substitute(~rho == x, list(x=cor.value))
g0 + labs(y="Angekreuzte Option", x=c.a)

对我来说,它会在图中打印出 expression(ρ = 0.84)。当我简单地调用 c.a. 时,控制台也会返回这个值。我试着从中提取这个字符串并使用 substring,但是 catas.character 都不能给出那个表示。 - rumtscho
是的,如果我使用“as.character”,则在图表上根本不会打印任何内容。 - rumtscho
2.2.0在这里,这是通过packages.install(在R 3.2.2上)传递的内容。 - rumtscho
@BenBolker的建议substitute(~rho == x, list(x=cor.value))对我来说有效,即使是旧版本的ggplot2 2.0.0,所以我怀疑这里的差异不在于2.2.0和2.2.1之间。 - drammock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接