2012-06-27 44 views
10

Có cách nào để tổng hợp dữ liệu với ggplot2 không?tổng hợp/tổng hợp với ggplot

Tôi muốn tạo bản đồ bong bóng có kích thước tùy thuộc vào tổng của z.

Hiện nay tôi đang làm một cái gì đó giống như

dd <- ddply(d, .(x,y), transform, z=sum(z)) 
qplot(x,y, data=dd, size=z) 

Nhưng tôi cảm thấy tôi đang viết những điều tương tự hai lần, tôi muốn để có thể viết một cái gì đó

qplot(x,y, data=dd, size=sum(z)) 

tôi đã có một cái nhìn tại stat_sumstat_summmary nhưng tôi cũng không chắc chắn chúng có phù hợp hay không.

Có thể thực hiện với ggplot2 không? Nếu không, cách tốt nhất để viết 2 dòng đó là gì.

Trả lời

6

Có thể thực hiện bằng cách sử dụng stat_sum trong ggplot2. Theo mặc định, kích thước dấu chấm biểu thị tỷ lệ. Để có được kích thước dấu chấm để biểu thị số lượng, hãy sử dụng size = ..n.. làm thẩm mỹ. Đếm (và tỷ lệ) bởi một biến thứ ba có thể thu được bằng trọng số của biến thứ ba (weight = cost) như là một thẩm mỹ. Một số ví dụ, nhưng trước tiên, một số dữ liệu.

library(ggplot2) 
set.seed = 321 
# Generate somme data 
df <- expand.grid(x = seq(1:5), y = seq(1:5), KEEP.OUT.ATTRS = FALSE) 
df$Count = sample(1:25, 25, replace = F) 
library(plyr) 
new <- dlply(df, .(Count), function(data) matrix(rep(matrix(c(data$x, data$y), ncol = 2), data$Count), byrow = TRUE, ncol = 2)) 
df2 <- data.frame(do.call(rbind, new)) 
df2$cost <- 1:325 

Dữ liệu chứa đơn vị được phân loại theo hai yếu tố: X1 và X2; và biến thứ ba là chi phí của mỗi đơn vị.

Lô 1: Lô tỷ lệ của các phần tử tại mỗi tổ hợp X1 - X2. group=1 yêu cầu ggplot tính toán tỷ lệ trong tổng số đơn vị trong khung dữ liệu.

ggplot(df2, aes(factor(X1), factor(X2))) + 
    stat_sum(aes(group = 1)) 

enter image description here

Lô 2: Plots số của các nguyên tố ở mỗi X1 - kết hợp X2.

ggplot(df2, aes(factor(X1), factor(X2))) + 
    stat_sum(aes(size = ..n..)) 

enter image description here

Lô 3: Plots chi phí của các yếu tố ở mỗi X1 - kết hợp X2, đó là weight bởi biến thứ ba.

ggplot(df2, aes(x=factor(X1), y=factor(X2))) + 
    stat_sum(aes(group = 1, weight = cost, size = ..n..)) 

enter image description here

Lô 4: Plots tỷ lệ tổng chi phí của tất cả các yếu tố trong khung dữ liệu ở mỗi X1 - X2 kết hợp

ggplot(df2, aes(x=factor(X1), y=factor(X2))) + 
    stat_sum(aes(group = 1, weight = cost)) 

enter image description here

Lô 5: Tỷ lệ ô mẫu, nhưng thay vì tỷ lệ nằm ngoài tổng chi phí trên tất cả các phần tử trong khung dữ liệu, tỷ lệ này nằm ngoài chi phí cho el ement trong mỗi thể loại của X1. Tức là, trong mỗi thể loại X1, chi phí chính cho các đơn vị X2 xảy ra là bao nhiêu?

ggplot(df2, aes(x=factor(X1), y=factor(X2))) + 
    stat_sum(aes(group = X1, weight = cost)) 

enter image description here

+0

Câu trả lời cho câu hỏi của tôi là số 3 thì sao? – mb14

+0

Xin lỗi, tôi nên nói vậy. Vâng. –

2

Bạn có thể đặt ddply gọi vào qplot:

d <- data.frame(x=1:10, y=1:10, z= runif(100)) 
qplot(x, y, data=ddply(d, .(x,y), transform, z=sum(z)), size=z) 

Hoặc sử dụng gói data.table.

DT <- data.table(d, key='x,y') 
qplot(x, y, data=DT[, sum(z), by='x,y'], size=V1) 
+1

Tôi biết tôi có thể làm điều đó, các giải pháp của bạn là tương đương với nỗ lực đầu tiên của tôi. Tôi muốn tránh phải chỉ định 'x, y' hai lần (trong cùng một dòng hoặc trong 2 dòng khác nhau) – mb14

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