R中的从右到左语言支持,使用Mac

24
我想知道在使用 Mac 时是否有任何方法来支持从右到左的语言在 R 中的显示。
例如,假设以下代码:
x <- data.frame(a=runif(10),b=runif(10))
ggplot(x, aes(a,b)) + geom_point() + xlab("سلام")

这是结果:

enter image description here

我尝试将x标签更改为波斯语/阿拉伯语单词(سلام = 你好)。在代码中正确显示(使用R-Studio),但在图表中, سلام 的字符顺序相反(从左到右)。

此外,两个连续字母之间的连线(即 س连接到ل 将成为 سل)已断开。

您有任何想法如何解决它吗?

更新

通过 @agstudy 的答案,我发现Ubuntu下的R完全正常。然而,我不知道如何解决Mac中的问题(OS X 10.9.1),尽管已经更新了R和R-Studio版本。


2
@agstudy 我在我的Mac上也能重现这个问题。看起来这是系统相关的。 - Roland
1
@agstudy 我不会打扰 Hadley,因为我不确定 ggplot2 是否有问题。我需要调查一下,但由于我永远不需要阿拉伯标签,所以我对此不是很感兴趣。 - Roland
1
我已经更新到 R 3.0.3,但问题仍然存在。这个问题在基本的 plot 中也存在。 - Scott Ritchie
1
看起来这个问题已经存在一段时间了,在 R 2.15.0 中问题仍然存在。我很惊讶之前没有人注意到这个问题。 - Scott Ritchie
4
我建议重新表述为非 ggplot 的问题(例如,我可以确认在 MacOS 10.6.8,R 3.0.3 上,plot(1:10,1:10,ylab="hello",xlab="سلام",cex.lab=5) 显示相同的问题,而 Linux(Ubuntu 12.04,R 3.1.0 / devel)则不会。您可以将其发布到 R 开发邮件列表(r-devel@r-project.org)或 R MacOS SIG 邮件列表... - Ben Bolker
显示剩余13条评论
4个回答

9

对我来说,它运行良好。我只是改变标签的大小以更好地展示它。

library(ggplot2)
x <- data.frame(a=runif(10),b=runif(10))
ggplot(x, aes(a,b)) + 
  geom_point()+ xlab('سلام') +
  theme( axis.title=element_text(size=100,face="bold"))

图片描述

我正在使用:

other attached packages:
[1] ggplot2_0.9.3.1
R version 3.0.2 (2013-09-25)
Platform: x86_64-w64-mingw32/x64 (64-bit)

也适用于:

R version 3.0.3 (2014-03-06)
Platform: x86_64-pc-linux-gnu (64-bit)

1
谢谢。看起来代码在Linux上运行得很完美,但在Mac上却不行。我已经相应地更新了问题。 - Ali

0
我曾经遇到过希伯来字母的同样问题,我通过从Excel文件中读取标签而不是直接在R studio中输入来解决它。只要您不需要将字母与数字混合使用,这种方法就可以正常工作,否则情况会变得混乱。 例如: {{link1:for example}}

1
虽然这可能是解决问题的有价值的提示,但一个好的答案也应该展示解决方案。请编辑以提供示例代码来说明您的意思。或者,考虑将其编写为评论。 - Toby Speight
@TobySpeight,我还不能添加评论,你能否将我的回答编辑为评论? - Nooga

0

我知道这是一个老问题,但我最近编写了一个R包来处理它。它是一些Python代码的简单R封装,因为在Mac上使用Python时也会出现这个问题。该软件包将阿拉伯字符串反转,然后使用Abdullah Diab的python-arabic-reshaper模块正确地重新连接字母。

我的软件包在这里。 Abdullah Diab的模块(用于Python)在这里


0
这个问题可能很老了,但我最近遇到了类似的问题,并花了最近两天的时间寻找解决方案。我尝试了回答中提到的各种解决方案,比如使用cairo_pdf,但在Windows上都没有成功。
我意识到我需要找到一个不会将文本转换为字形的图形设备。幸运的是,svglite包正好可以做到这一点。然而,将一个svg文件嵌入到LaTeX文档中又带来了另一个挑战。
好吧,这是一个解决方案:
current_plot_hook <- knit_hooks$get('plot')
knit_hooks$set(plot = function(x, options) {
  res <- current_plot_hook(x, options)

  filename <- file.path(options$fig.path, paste0(options$label,"-", options$fig.num))
  filenameext <- paste0(filename, ".svg")

  rsvg::rsvg_pdf(svg = filenameext, 
                 file = paste0(filename, ".pdf"),
                 height = options$fig.height * 92,
                 width = options$fig.width * 92)
 res
})
opts_chunk$set(
  dev = "svglite"
) 

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