2012-06-27 16 views
10

ggplot2 के साथ डेटा एकत्र करने का कोई तरीका है?कुल मिलाकर/ggplot

मैं z के योग के आधार पर आकार के साथ एक बबल नक्शा करना चाहता हूं।

वर्तमान में मैं जैसे

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

कुछ कर रहा हूँ लेकिन मुझे लगता है कि मैं दो बार एक ही बात लिख रहा हूँ, मुझे लगता है मैं एक नज़र था कुछ

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

लिखने में सक्षम होना चाहते हैं stat_sum और stat_summmary पर लेकिन मुझे यकीन नहीं है कि वे उचित हैं।

क्या यह ggplot2 के साथ संभव है? यदि नहीं, तो उन 2 लाइनों को लिखने का सबसे अच्छा तरीका क्या होगा।

उत्तर

6

यह ggplot2 के भीतर stat_sum का उपयोग करके किया जा सकता है। डिफ़ॉल्ट रूप से, डॉट आकार अनुपात का प्रतिनिधित्व करता है। गणना का प्रतिनिधित्व करने के लिए डॉट आकार प्राप्त करने के लिए, size = ..n.. को सौंदर्यशास्त्र के रूप में उपयोग करें। एक तीसरे चर द्वारा गणना (और अनुपात) को तीसरे चर (weight = cost) द्वारा सौंदर्यशास्त्र के रूप में भारित करके प्राप्त किया जा सकता है। कुछ उदाहरण, लेकिन पहले, कुछ डेटा।

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 

डेटा में दो कारकों के अनुसार वर्गीकृत इकाइयां शामिल हैं: एक्स 1 और एक्स 2; और एक तिहाई चर जो प्रत्येक इकाई की लागत है।

प्लॉट 1: प्रत्येक एक्स 1 - एक्स 2 संयोजन में तत्वों के अनुपात प्लॉट्स। group=1 डेटा फ्रेम में इकाइयों की कुल संख्या से अनुपात की गणना करने के लिए ggplot बताता है।

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

enter image description here

प्लॉट 2: भूखंड प्रत्येक एक्स 1 में तत्वों की संख्या - X2 संयोजन।

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

enter image description here

प्लॉट 3: भूखंड प्रत्येक एक्स 1 में तत्वों की लागत - X2 संयोजन, कि weight तीसरे चर कर रहा है।

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

enter image description here

प्लॉट 4: भूखंड प्रत्येक एक्स 1 में डेटा फ्रेम के सभी तत्वों की कुल लागत का अनुपात - X2 संयोजन

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

enter image description here

प्लॉट 5: भूखंड अनुपात, लेकिन डेटा फ्रेम में सभी तत्वों में कुल लागत से बाहर होने वाले अनुपात के बजाय, अनुपात एल के लिए लागत से बाहर है X1 की प्रत्येक श्रेणी के भीतर ements। यही है, प्रत्येक एक्स 1 श्रेणी के भीतर, एक्स 2 इकाइयों के लिए प्रमुख लागत कहां होती है?

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

enter image description here

+0

क्या मेरे प्रश्न प्लॉट # 3 का उत्तर है? – mb14

+0

क्षमा करें, मुझे ऐसा कहना चाहिए था। हाँ। –

2

आप qplot में ddply कॉल डाल सकता है:

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) 

या data.table पैकेज का उपयोग करें।

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

मैं जानता हूँ कि मुझे लगता है कि, आपका समाधान मेरी पहली कोशिश के बराबर हैं कर सकते हैं। मैं 'x, y' को दो बार निर्दिष्ट करने से बचना चाहता हूं (उसी पंक्ति में या 2 अलग-अलग पंक्तियों में) – mb14

संबंधित मुद्दे