2016-06-06 60 views
5

Tôi đang cố vẽ các nhãn trông thông tin, rõ ràng và ngăn nắp.Trục ggplot2 tùy chỉnh và định dạng nhãn

I was following example và nêu thêm một câu hỏi về định dạng labelaxis.

Ví dụ: tôi có dữ liệu bán hàng bao gồm Thương hiệu, Danh mục và Chi tiêu bằng EUR. Khi tổng số tiền của EUR lớn (hàng triệu nhãn trở lên) trông thực sự khó đọc và không mang tính thông tin.

Kết quả là, x-axis nằm ở Scientific notation và cũng trông thực sự không rõ ràng.

Tôi đã quản lý để định dạng nhãn theo cách tùy chỉnh: nó hiển thị Eur in hàng nghìn. geom_text(aes(label= paste(round(EUR/1000,0),"€"), y=pos), colour="white") Có cách nào dễ dàng hơn hoặc tự động hơn không?

Scientific notation trông thực sự không rõ ràng, đối với trục tôi đã thử sử dụng scale_y_continuous(formatter = "dollar"), nhưng điều này có vẻ không hoạt động. Hơn nữa, tôi không thể tìm thấy nếu có Eur cũng được thực hiện thay vì đô la. Tôi tin rằng nó sẽ là tốt nhất để hiển thị y-axis trong thousands. Bất kỳ giải pháp nào?

Ngoài ra, tôi gửi kèm theo ví dụ tái sản xuất:

library(plyr) 
library(dplyr) 
library(ggplot2) 
library(scales) 


set.seed(1992) 
n=68 

Category <- sample(c("Black", "Red", "Blue", "Cyna", "Purple"), n, replace = TRUE, prob = NULL) 
Brand <- sample("Brand", n, replace = TRUE, prob = NULL) 
Brand <- paste0(Brand, sample(1:5, n, replace = TRUE, prob = NULL)) 
EUR <- abs(rnorm(n))*100000 

df <- data.frame(Category, Brand, EUR) 


df.summary = df %>% group_by(Brand, Category) %>% 
    summarise(EUR = sum(EUR)) %>% # Within each Brand, sum all values in each Category 
    mutate(pos = cumsum(EUR)-0.5*EUR) 



ggplot(df.summary, aes(x=reorder(Brand,EUR,function(x)+sum(x)), y=EUR, fill=Category)) + 
    geom_bar(stat='identity', width = .7, colour="black", lwd=0.1) + 
    geom_text(aes(label=ifelse(EUR>100,paste(round(EUR/1000,0),"€"),""), 
       y=pos), colour="white") + 
    coord_flip()+ 
    labs(y="", x="") 

enter image description here

Trả lời

8

Bạn có thể đặt tiền tố trong dollar_format cho euro thay vì đô la:

scale_y_continuous(labels=dollar_format(prefix="€")) + 

Đó sẽ chăm sóc của các ký hiệu khoa học vấn đề.

Để nhận mọi thứ trong hàng nghìn, bạn có thể chia cho 1000 khi bạn tạo tóm tắt. Để giảm sự lộn xộn, bạn có thể bỏ qua các biểu tượng đồng euro trong nhãn thanh, nhưng tôi đã giữ biểu tượng trong ví dụ dưới đây:

df.summary = df %>% group_by(Brand, Category) %>% 
    summarise(EUR = sum(EUR)/1000) %>% # Within each Brand, sum all values in each Category 
    mutate(pos = (cumsum(EUR)-0.5*EUR)) 

ggplot(df.summary, aes(x=reorder(Brand,EUR,function(x)+sum(x)), y=EUR, fill=Category)) + 
    geom_bar(stat='identity', width = .7, colour="black", lwd=0.1) + 
    geom_text(aes(label=ifelse(EUR>100,paste0("€", round(EUR,0)),""), 
       y=pos), colour="white") + 
    scale_y_continuous(labels=dollar_format(prefix="€")) + 
    coord_flip()+ 
    labs(y="Thousands of €", x="") 

enter image description here

+0

Bất kỳ ý tưởng nào trong biểu tượng 'sáng bóng' '' được hiển thị là '???'? – AK47

0

@ AK47 có một vấn đề phân tích cú pháp của Euro đăng nhập sáng bóng.

Hãy thử thay thế bằng cách này: (\ u20AC)

Nó đã làm việc khá tốt cho tôi cho đến nay.

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