2016-06-10 17 views
9

Hãy sử dụng số liệu mpg làm ví dụ, cụ thể là các cột classcyl. Tôi có thể xem có bao nhiêu mục đang có, mỗi đơn class, và phân biệt màu sắc lấp dựa trên giá trị cyl:Tổng hợp dữ liệu với ggplot

library(ggplot2) 
p <- ggplot(mpg) 
p <- p + geom_bar(mapping=aes(x=class, fill=factor(cyl)), position=position_dodge()) 
print(p) 

enter image description here

Những gì tôi muốn xem, tuy nhiên, là mức trung bình số mục nhập (mỗi class), mỗi giá trị khác nhau của cyl. Về cơ bản, nếu bạn nhìn vào cốt truyện ở trên, tôi muốn một thanh duy nhất cho mỗi lớp, có chiều cao nên là chiều cao trung bình của các thanh màu cho lớp đó.

tôi có thể để có được kết quả này bởi tiền xử lý các khung dữ liệu, ví dụ:

df <- aggregate(formula=cyl~class, data=mpg, FUN=function(x) { length(x)/length(unique(x)) }) 
p <- ggplot(df) 
p <- p + geom_bar(mapping=aes(x=class, y=cyl), stat='identity') 
p <- p + ylab('average count') 

Điều đó cho mong muốn đầu ra của tôi:

enter image description here

Tuy nhiên, do cách mạnh mẽ ggplot2 là , Tôi tự hỏi, nếu điều này là có thể thông qua các chức năng ggplot. Tôi đoán điều này liên quan đến việc sử dụng một stat cụ thể (có thể với group=cyl?), Nhưng tôi không thể.

+0

tặng một cái nhìn 'stat_summary' [link] (http: //docs.ggplot2 .org/current/stat_summary.html) – user3631369

+0

@ user3631369 Tôi đang chơi với nó ngay bây giờ, nhưng tôi không nhận được kết quả. Tôi không thể tổng hợp trên lĩnh vực hình trụ. – natario

Trả lời

13

Chúng tôi có thể cắm công thức của bạn thẳng vào stat_summary() để tạo ra kết quả mong muốn mà không cần các bước trung gian:

library(ggplot2) 
ggplot(mpg) + 
    stat_summary(aes(x = class, y = cyl), 
       fun.y = function(x) length(x)/length(unique(x)), 
       geom = "bar") 

enter image description here

+0

có cách nào để chuyển 'fun.y' thành hàm tổng hợp, dựa trên các biến khác trong data.frame không? (Vì vậy, tôi có thể tính toán một khoản tiền trong mỗi nhóm - bằng cách nào đó tôi không thể làm việc này ...) –

+0

Bạn có thể đưa ra một ví dụ không? Có lẽ đặt một câu hỏi mới – mtoto

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