2012-12-11 5 views
20

비표준 문자 세트 [러시아어]에서 축 레이블을 올바르게 표시하는 데 어려움을 겪고 있습니다. 이러한 문자열을 사용할 때 ggplot은 축 레이블을 지정합니다. 내가 별도의 변수로 이름을 저장하고 포맷을 변환 geom_text()utf-8 in ggplot 축 레이블

를 사용하여 라벨 이러한 플롯 할 때 U + 0441 U + 043D U + 0433

Ggplot \

는 인코딩 권리를 얻는다 데이터 프레임의 UTF-8로 이미 인코딩 되었기 때문에 db$variable=sapply(db$variable,function(row) iconv(row,to='UTF-8'))의 결과가 스크램블 된 문자가됩니다.

scale_x_discrete(labels=names)을 사용하여 사용자 지정 축을 사용하여이 작업을 수행 할 수 있지만, 특히 데이터에 누락 값이있는 경우이 방법은 약간 다루기 힘듭니다. ggplot에서 이러한 문자를 올바르게 표시 할 수있는 방법이 있습니까?

를 긁적 일부 헤드 후 편집

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

문제를 해결할 것으로 보인다. 그래도 R/ggplot이 UTF8 코드를 받아들이는 상황에 대해 왜 일관성이 없는지 아직도 이해하지 못합니다. 위의 예제에서 문제는 축 레이블로 제한됩니다. 이것은 축 레이블의 경우 문자열이 데이터 테이블에서 가져와 졌기 때문에 동일한 행이 문자열이나 행렬에 저장되는 경우 인코딩이 다르게 처리됩니다.

+6

그것은 당신이 당신의 질문에 대답처럼 들린다. 'Sys.setlocale ("LC_CTYPE", "russian")의 해답을 제안하고 ggplot의 불일치에 관한 새로운 질문을 열어 주시겠습니까? 이것은 또한 ggplot 질문에 더 많은 관심을 갖게 할 것입니다 :) – Rilcon42

답변

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

+0

ggplot의 어떤 버전을 사용하고 있습니까? –