【问题标题】:utf-8 in ggplot axis labelsggplot 轴标签中的 utf-8
【发布时间】:2012-11-28 23:44:25
【问题描述】:

我正在努力让 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 代码不一致。在上面的示例中,问题仅限于轴标签。这是因为对于轴标签,字符串是从数据表中获取的,如果相同的行存储在字符串或矩阵中,它以某种方式处理编码不同?

【问题讨论】:

  • 听起来你回答了你的问题。您会提出Sys.setlocale("LC_CTYPE","russian") 的解决方案作为答案,然后提出一个关于 ggplot 不一致的新问题吗?这也会让你的 ggplot 问题得到更多关注:)

标签: r ggplot2


【解决方案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="Замещение, куб.дюйм")

产生正确的情节:

【讨论】:

  • 你用的是什么版本的ggplot?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多