ggplot轴标签中的utf-8

Rol*_*eim 20 r ggplot2

在非标准字符集[俄语]中,我很难让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")
Run Code Online (Sandbox Code Playgroud)

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

dmi*_*kno 1

I guess this has been solved in the most recent version of ggplot.

\n\n
    library(tidyverse)\nlibrary(ggrepel)\n\nrussian_names<-structure(list(rowname = c("\xd0\x9c\xd0\xb0\xd0\xb7\xd0\xb4\xd0\xb0 RX4", "\xd0\x9c\xd0\xb0\xd0\xb7\xd0\xb4\xd0\xb0 RX4 \xd0\x92\xd0\xb0\xd0\xb3\xd0\xbe\xd0\xbd", "\xd0\x94\xd0\xb0\xd1\x82\xd1\x81\xd1\x83\xd0\xbd 710", \n                                          "\xd0\xa5\xd0\xbe\xd1\x80\xd0\xbd\xd0\xb5\xd1\x82 4 Drive", "\xd0\xa5\xd0\xbe\xd1\x80\xd0\xbd\xd0\xb5\xd1\x82 Sportabout", "\xd0\x92\xd0\xb0\xd0\xbb\xd0\xb8\xd0\xb0\xd0\xbd\xd1\x82", "\xd0\x94\xd0\xb0\xd1\x81\xd1\x82\xd0\xb5\xd1\x80 360", \n                                          "\xd0\x9c\xd0\xb5\xd1\x80\xd1\x81\xd0\xb5\xd0\xb4\xd0\xb5\xd1\x81 240D", "\xd0\x9c\xd0\xb5\xd1\x80\xd1\x81\xd0\xb5\xd0\xb4\xd0\xb5\xd1\x81 230", "\xd0\x9c\xd0\xb5\xd1\x80\xd1\x81\xd0\xb5\xd0\xb4\xd0\xb5\xd1\x81 280", "\xd0\x9c\xd0\xb5\xd1\x80\xd1\x81\xd0\xb5\xd0\xb4\xd0\xb5\xd1\x81 280C", "\xd0\x9c\xd0\xb5\xd1\x80\xd1\x81\xd0\xb5\xd0\xb4\xd0\xb5\xd1\x81 450SE", \n                                          "\xd0\x9c\xd0\xb5\xd1\x80\xd1\x81\xd0\xb5\xd0\xb4\xd0\xb5\xd1\x81 450SL", "\xd0\x9c\xd0\xb5\xd1\x80\xd1\x81\xd0\xb5\xd0\xb4\xd0\xb5\xd1\x81 450SLC", "\xd0\x9a\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xbb\xd0\xbb\xd0\xb0\xd0\xba \xd0\xa4\xd0\xbb\xd0\xb8\xd1\x82\xd0\xb2\xd1\x83\xd0\xb4", "\xd0\x9b\xd0\xb8\xd0\xbd\xd0\xba\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xbd \xd0\x9a\xd0\xbe\xd0\xbd\xd1\x82\xd0\xb8\xd0\xbd\xd0\xb5\xd0\xbd\xd1\x82\xd0\xb0\xd0\xbb\xd1\x8c", \n                                          "\xd0\x9a\xd1\x80\xd0\xb0\xd0\xb9\xd1\x81\xd0\xbb\xd0\xb5\xd1\x80 \xd0\x98\xd0\xbc\xd0\xbf\xd0\xb5\xd1\x80\xd0\xb8\xd0\xb0\xd0\xbb", "\xd0\xa4\xd0\xb8\xd0\xb0\xd1\x82 128", "\xd0\xa5\xd0\xbe\xd0\xbd\xd0\xb4\xd0\xb0 \xd0\xa1\xd0\xb8\xd0\xb2\xd0\xb8\xd0\xba", "\xd0\xa2\xd0\xbe\xd0\xb9\xd0\xbe\xd1\x82\xd0\xb0 \xd0\x9a\xd0\xbe\xd1\x80\xd0\xbe\xd0\xbb\xd0\xbb\xd0\xb0", \n                                          "\xd0\xa2\xd0\xbe\xd0\xb9\xd0\xbe\xd1\x82\xd0\xb0 \xd0\x9a\xd0\xbe\xd1\x80\xd0\xbe\xd0\xbd\xd0\xb0", "\xd0\x94\xd0\xbe\xd0\xb4\xd0\xb6 \xd0\xa7\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb4\xd0\xb6\xd0\xb5\xd1\x80", "\xd0\xad\xd0\xb9\xd0\xad\xd0\xbc\xd0\xa1\xd0\xb8 \xd0\x94\xd0\xb6\xd0\xb0\xd0\xb2\xd0\xb5\xd0\xbb\xd0\xb8\xd0\xbd", "\xd0\x9a\xd0\xb0\xd0\xbc\xd0\xb0\xd1\x80\xd0\xbe Z28", \n                                          "\xd0\x9f\xd0\xbe\xd0\xbd\xd1\x82\xd0\xb8\xd0\xb0\xd0\xba \xd0\xa4\xd0\xb0\xd0\xb9\xd0\xb5\xd1\x80\xd0\xb1\xd1\x91\xd1\x80\xd0\xb4", "\xd0\xa4\xd0\xb8\xd0\xb0\xd1\x82 X1-9", "\xd0\x9f\xd0\xbe\xd1\x80\xd1\x88 914-2", "\xd0\x9b\xd0\xbe\xd1\x82\xd1\x83\xd1\x81 \xd0\x95\xd0\xb2\xd1\x80\xd0\xbe\xd0\xbf\xd0\xb0", \n                                          "\xd0\xa4\xd0\xbe\xd1\x80\xd0\xb4 \xd0\x9f\xd0\xb0\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xb0 L", "\xd0\xa4\xd0\xb5\xd1\x80\xd1\x80\xd0\xb0\xd1\x80\xd0\xb8 \xd0\x94\xd0\xb8\xd0\xbd\xd0\xbe", "\xd0\x9c\xd0\xb0\xd0\xb7\xd0\xb5\xd1\x80\xd0\xb0\xd1\x82\xd0\xb8 \xd0\x91\xd0\xbe\xd1\x80\xd0\xb0", "\xd0\x92\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb2\xd0\xbe 142E"\n)), row.names = c(NA, -32L), class = "data.frame", .Names = "rowname")\n\nmtcars %>% bind_cols(russian_names)  %>% \n  ggplot(mapping=aes(x=mpg, y=disp))+\n  geom_point()+\n  geom_label_repel(aes(label=russian_names), size=2)+\n  labs(x="\xd0\x9c\xd0\xb8\xd0\xbb\xd1\x8c \xd0\xbd\xd0\xb0 \xd0\xb3\xd0\xb0\xd0\xbb\xd0\xbb\xd0\xbe\xd0\xbd",\n       y="\xd0\x97\xd0\xb0\xd0\xbc\xd0\xb5\xd1\x89\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5, \xd0\xba\xd1\x83\xd0\xb1.\xd0\xb4\xd1\x8e\xd0\xb9\xd0\xbc")\n
Run Code Online (Sandbox Code Playgroud)\n\n

Results in a proper plot:

\n\n

在此输入图像描述

\n