我努力让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编码不一致,虽然。 在该问题上面的例子中被限制在轴标签。 这是因为对于轴标签的字符串从一个数据表,它以某种方式与编码涉及不同地,如果同一行存储在字符串或矩阵取?
我想这已经在最新版本中得到解决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="Замещение, куб.дюйм")
结果在适当的情节: