ggplot轴标签中的utf-8

时间:2012-12-11 12:00:54

标签: r ggplot2

我很难让ggplot在非标准字符集[俄语]中正确显示轴标签。当使用这样的字符串时,ggplot标记轴,例如

  

\ U + 0441 U + 043D U + 0433

当我将名称保存为单独的变量并使用geom_text()

将这些名称绘制为标签时,Ggplot会获得正确的编码

转换数据框的格式也无济于事:  db$variable=sapply(db$variable,function(row) iconv(row,to='UTF-8'))导致字符加扰,大概是因为数据已在数据框中编码为UTF-8

我可以使用scale_x_discrete( labels=names)使用自定义轴来完成这项工作,但这有点笨拙,特别是当数据缺少值时。有没有办法让ggplot首先正确显示这些字符?

修改

看起来有点头疼之后

Sys.setlocale("LC_CTYPE","russian")

将解决问题。我仍然不明白为什么R / ggplot在什么情况下会接受UTF8代码是不一致的。在上面的示例中,问题仅限于轴标签。这是因为对于轴标签而言,字符串是从数据表中提取的,如果相同的行存储在字符串或矩阵中,它会以某种方式处理不同的编码吗?

1 个答案:

答案 0 :(得分:1)

我想这已在ggplot的最新版本中得到解决。

    library(tidyverse)
library(ggrepel)

russian_names<-structure(list(rowname = c("Мазда RX4", "Мазда RX4 Вагон", "Датсун 710", 
                                          "Хорнет 4 Drive", "Хорнет Sportabout", "Валиант", "Дастер 360", 
                                          "Мерседес 240D", "Мерседес 230", "Мерседес 280", "Мерседес 280C", "Мерседес 450SE", 
                                          "Мерседес 450SL", "Мерседес 450SLC", "Кадиллак Флитвуд", "Линкольн Континенталь", 
                                          "Крайслер Империал", "Фиат 128", "Хонда Сивик", "Тойота Королла", 
                                          "Тойота Корона", "Додж Чаленджер", "ЭйЭмСи Джавелин", "Камаро Z28", 
                                          "Понтиак Файербёрд", "Фиат X1-9", "Порш 914-2", "Лотус Европа", 
                                          "Форд Пантера L", "Феррари Дино", "Мазерати Бора", "Вольво 142E"
)), row.names = c(NA, -32L), class = "data.frame", .Names = "rowname")

mtcars %>% bind_cols(russian_names)  %>% 
  ggplot(mapping=aes(x=mpg, y=disp))+
  geom_point()+
  geom_label_repel(aes(label=russian_names), size=2)+
  labs(x="Миль на галлон",
       y="Замещение, куб.дюйм")

在合适的情节中得出结论:

enter image description here