首页 文章

ggplot轴标签中的utf-8

提问于
浏览
20

在非标准字符集[俄语]中,我很难让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首先正确显示这些字符?

edit

看起来有点头疼

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

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

1 回答

  • 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

相关问题