2012-12-11 34 views
20

Tôi đang cố gắng để có được ggplot để hiển thị nhãn trục chính xác khi trong bộ ký tự không chuẩn [Nga]. khi sử dụng các chuỗi như vậy, các nhãn ggplot, ví dụ:utf-8 trong nhãn trục ggplot

\ U + 0441 U + 043D U + 0433

Ggplot được mã hóa ngay khi tôi lưu tên như là một biến riêng biệt và vẽ những như các nhãn sử dụng geom_text()

chuyển đổi định dạng của khung dữ liệu không giúp được gì nhiều: db$variable=sapply(db$variable,function(row) iconv(row,to='UTF-8')) kết quả trong các ký tự bị xáo trộn, có lẽ do dữ liệu đã được mã hóa dưới dạng UTF-8 trong khung dữ liệu

Tôi có thể thực hiện công việc này bằng cách sử dụng một trục tùy chỉnh bằng cách sử dụng scale_x_discrete(labels=names) nhưng điều này hơi khó sử dụng, đặc biệt khi dữ liệu bị thiếu giá trị. Có cách nào để có được ggplot để hiển thị các ký tự một cách chính xác ở nơi đầu tiên?

chỉnh sửa

Sau khi một số người đứng đầu gãi có vẻ như

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

sẽ giải quyết vấn đề. Tôi vẫn không thực sự hiểu tại sao R/ggplot là không phù hợp về những hoàn cảnh nào nó sẽ chấp nhận mã UTF8, mặc dù. Trong ví dụ trên, vấn đề được giới hạn ở các nhãn trục. Đây có phải là vì các nhãn trục chuỗi được lấy từ một bảng dữ liệu, mà bằng cách nào đó giao dịch với mã hóa khác nhau để nếu cùng một dòng được lưu trữ trong một chuỗi hoặc ma trận?

+6

Có vẻ như bạn đã trả lời câu hỏi của bạn. Bạn sẽ đề xuất giải pháp của bạn về 'Sys.setlocale (" LC_CTYPE "," nga ")' làm câu trả lời, sau đó mở một câu hỏi mới liên quan đến sự không thống nhất của ggplot? Điều này cũng sẽ nhận được câu hỏi ggplot của bạn chú ý hơn :) – Rilcon42

Trả lời

1

Tôi đoán điều này đã được giải quyết trong phiên bản mới nhất của 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="Замещение, куб.дюйм") 

Kết quả trong một âm mưu thích hợp:

enter image description here

+0

Bạn đang sử dụng phiên bản ggplot nào? –

Các vấn đề liên quan