2015-06-03 24 views
8

Tôi muốn tạo biểu đồ thanh đơn giản với ggplot2 và vấn đề của tôi là biến x của tôi chứa chuỗi dài để nhãn được phủ lên.Tạo chú thích viết tắt theo cách thủ công cho nhãn X dài trong ggplot2

Dưới đây là dữ liệu ngay giả và cốt truyện:

library(dplyr) 
library(tidyr) 
library(ggplot2) 

set.seed(42) 
datas <- data.frame(label = sprintf("aLongLabel%d", 1:8), 
      ok = sample(seq(0, 1, by = 0.1), 8, rep = TRUE)) %>% 
    mutate(err = abs(ok - 1)) %>% 
    gather(type, freq, ok, err) 

datas %>% 
    ggplot(aes(x = label, y = freq)) + 
    geom_bar(aes(fill = type), stat = "identity") 

enter image description here

Tôi muốn thay thế các nhãn bởi những ngắn hơn và tạo ra một huyền thoại để hiển thị các trận đấu.

Những gì tôi đã cố gắng:

tôi sử dụng tham số aes hình dạng trong geo_point mà sẽ tạo ra một huyền thoại với hình dạng (và lô hình dạng mà tôi giấu với alpha = 0). Sau đó, tôi thay đổi hình dạng với scale_shape_manual và thay thế các nhãn x bằng scale_x_discrete. Với guides Tôi ghi đè thông số alpha của các hình dạng của mình để chúng không bị ẩn trong chú giải.

leg.txt <- levels(datas$label) 
x.labels <- structure(LETTERS[seq_along(leg.txt)], 
         .Names = leg.txt) 

datas %>% 
    ggplot(aes(x = label, y = freq)) + 
    geom_bar(aes(fill = type), stat = "identity") + 
    geom_point(aes(shape = label), alpha = 0) + 
    scale_shape_manual(name = "Labels", values = x.labels) + 
    guides(shape = guide_legend(override.aes = list(size = 5, alpha = 1))) + 
    scale_x_discrete(name = "Label", labels = x.labels) 

enter image description here

Nó mang lại cho tôi những kết quả mong muốn nhưng tôi cảm thấy như thế này là rất hacky.

Ggplot2 có cung cấp cách để thực hiện việc này trực tiếp hơn không? Cảm ơn.

+1

Bạn nên xoay chúng thay vì: http://stackoverflow.com/questions/ 1330989/xoay-và-khoảng cách-trục-nhãn-in-ggplot2 –

+0

Tôi thậm chí không nghĩ về điều đó ... Nó có thể là một ý tưởng tốt thực sự. –

+2

Tôi thích điều này rất nhiều, nhưng nó cần một tiêu đề tốt hơn để mọi người có thể tìm thấy nó. Có thể một cái gì đó như "Rút ngắn nhãn ggplot với chữ viết tắt". Và trong khi xoay vòng là một giải pháp tốt, đôi khi điều này sẽ tốt hơn. –

Trả lời

2

giải pháp được đề xuất bởi Rotation Pascal

Xoay nhãn và sắp xếp chúng đến góc:

datas %>% 
    ggplot(aes(x = label, y = freq)) + 
    geom_bar(aes(fill = type), stat = "identity") + 
    theme(axis.text.x = element_text(angle = 90, hjust = 1)) 

enter image description here

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