【发布时间】:2021-01-13 09:43:48
【问题描述】:
在ggplot,我经常需要编辑x轴标签。我的常规例程是为标签创建一个额外的 named 向量(例如,my_labels),然后使用scale_x_labels(labels = my_labels)。
特别是,当需要将标签翻译成不同的语言时,这种方法很有用。但是,当尝试用从右到左的语言换行标签文本时,这会出现错误。
示例
1 -- 一个简单的条形图
library(dplyr)
library(ggplot2)
mpg %>%
filter(class == 'pickup' | class == "suv" | class == "compact") %>%
ggplot(aes(class, fill = factor(class))) +
geom_bar()
2 -- 创建一个向量,将 x 轴标签从英语翻译成希伯来语
my_labels <-
c(
pickup = "פיקאפ",
suv = "סיובי",
compact = "קומפקטי"
)
3 -- 重新创建条形图,现在使用新的希伯来语标签
mpg %>%
filter(class == 'pickup' | class == "suv" | class == "compact") %>%
ggplot(aes(class, fill = factor(class))) +
geom_bar() +
scale_x_discrete(labels = my_labels) # <------ this is the addition, and it works as intended
4 -- 这里的问题:我想为标签文本添加文本环绕功能,但它搞砸了顺序
为简单起见,我选择了不符合换行标准但仍能证明基本问题的简短希伯来语标签。
library(stringr)
mpg %>%
filter(class == 'pickup' | class == "suv" | class == "compact") %>%
ggplot(aes(class, fill = factor(class))) +
geom_bar() +
scale_x_discrete(labels = str_wrap(my_labels, 10)) ## based on: https://stackoverflow.com/a/21894897/6105259
可以看出,仅仅添加stringr::str_wrap() 就搞乱了标签的顺序。使用其他包装技术 (this one too, for example) 会重复此问题。
知道如何为 x 轴标签指定外部命名向量,和在 RTL 语言(例如希伯来语)中应用文本换行方法,同时保留正确的订购?
【问题讨论】:
标签: r ggplot2 word-wrap right-to-left axis-labels