Подтвердить что ты не робот

Utf-8 в методах оси ggplot

Я изо всех сил пытаюсь заставить ggplot правильно отображать метки оси, когда в нестандартном наборе символов [Русский]. при использовании таких строк метки меток 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. В приведенном выше примере проблема ограничивалась метками оси. Это потому, что для меток оси строка была взята из таблицы данных, которая каким-то образом имеет дело с кодировкой по-разному, если одни и те же строки хранятся в строке или матрице?

4b9b3361

Ответ 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="Замещение, куб.дюйм")

Результаты в правильном сюжете:

введите описание изображения здесь