2012-12-11 20 views
20

非標準の文字セット[ロシア語]で軸ラベルが正しく表示されるように苦労しています。このような文字列を使用する場合、ggplotは軸をラベルします。utf-8 in ggplot軸ラベル

\ U + 0441 U + 043D U + 0433

Ggplotは、私は別の変数として名を保存エンコードの権利を取得し、フォーマットを変換geom_text()

を使用してラベルとしてこれらをプロット 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コードを受け入れるのかについて、なぜR/gplotが矛盾しているのかをまだ分かりません。上記の例では、問題は軸ラベルに限られていました。これは、軸ラベルの場合、文字列が文字列や行列に格納されている場合とは異なる方法でエンコーディングを扱うデータテーブルから文字列がフェッチされたためですか?

+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のどのバージョンを使用していますか? –

関連する問題