将坐标轴文本方向更改为从右到左

7
在阿拉伯语和希伯来语等从右到左的语言中,我该如何调整 ggplot2 文本元素的文本方向?请注意,我不是在谈论对齐方式(由hjust控制),而是实际方向(相当于 CSS 的 direction: rtl;)的渲染方式。因此,这不是 this question 的复制。

以下是一个最小可重现的示例:

library(ggplot2)
library(tibble)

example1 <- tribble(
  ~item,
  "האם יורד גשם?"
)

# or as ordinary data frame, to avoid 'tibble' dependency
example1 <- data.frame(item = "האם יורד גשם?")

ggplot(example1, aes(item)) + 
  geom_bar() + 
  theme(axis.text.x = element_text(size = 25))

我已将坐标轴文本x放大,以说明我的意思。 该代码生成以下图表,请注意问号位于文本的右侧,而我希望它出现在文本的左侧。在tibble example1中是可以的(即使它看起来“相反”,问号结束了句子)。

Change direction of element_text


主题(axis.text.x = element_text(size = 25, angle = -180))? - Henry Cyranka
稍微相关:目前在Github上有一个RtL绘图的WIP拉取请求 - Roman
2个回答

3
你可以使用Unicode控制字符“RIGHT-TO-LEFT EMBEDDING”(“将以下文本视为从右到左嵌入”):u202B。请参见显式方向嵌入
example1$item <- paste("\u202B", example1$item)
ggplot(example1, aes(item)) + 
   geom_bar() +
   theme(axis.text.x = element_text(size = 25))

enter image description here


太棒了!我非常印象深刻。我没想到它会这么简单。谢谢! - Adi Sarid

0

你需要更改原始文本中的问号,然后它就可以正常显示:

library(ggplot2)
library(tibble)
example1 <- tribble(
  ~item,
  "?האם יורד גשם"
)

ggplot(example1, aes(item)) + 
geom_bar() + 
theme(axis.text.x = element_text(size = 25))

嗨,Omry,这个答案只是一个解决方案,仅在您有一条简单的线的简单情况下解决问题。想象一下有一个带有希伯来字符的大数据文件,可能使用文本换行,即使用str_wrap并且换行会产生其他标点符号(-,.?!等)在其他行中... 这使得这个解决方案不太实用。 - Adi Sarid

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