2016-02-29 5 views
5

मैं उस पहलू की आबादी औसत के साथ एक क्षैतिज पहलू-चौड़ी रेखा को साजिश करना चाहता हूं।ggplot2: प्रत्येक पहलू के लिए जनसंख्या औसत के साथ हलाइन जोड़ें

require(ggplot2) 

dt = data.frame(gr = rep(1:2, each = 500), 
      id = rep(1:5, 2, each = 100), 
      y = c(rnorm(500, mean = 0, sd = 1), rnorm(500, mean = 1, sd = 2))) 


ggplot(dt, aes(x = as.factor(id), y = y)) + 
    geom_boxplot() + 
    facet_wrap(~ gr) + 
    geom_hline(aes(yintercept = median(y), group = gr), colour = 'red') 

हालांकि, लाइन पूरे प्रत्येक पहलू के लिए अलग से मंझला के बजाय डाटासेट की औसत के लिए तैयार की है:

मैं निम्नलिखित कोड के साथ एक डमी सारांश तालिका बनाने के बिना दृष्टिकोण की कोशिश की enter image description here

अतीत में, एक solution उपयोग करने के लिए सुझाव दिया गया है

geom_line(stat = "hline", yintercept = "median") 

लेकिन इसे बंद कर दिया गया है (त्रुटि उत्पन्न करता है "स्टेटलाइन नामक कोई स्टेट नहीं")।

एक और solution

geom_errorbar(aes(ymax=..y.., ymin=..y.., y = mean)) 

सुझाव दिया, लेकिन यह अंत में

Error in data.frame(y = function (x, ...) : 
arguments imply differing number of rows: 0, 1000 

उत्पन्न करता है, वहाँ वांछित आँकड़ों के साथ एक dummy table बनाकर मंझला प्लॉट करने के लिए एक रास्ता है लेकिन मैं इसे से बचने के लिए चाहते हैं।

उत्तर

9

आप औसत प्रति फेस के लिए dt में एक अतिरिक्त कॉलम बना सकते हैं।

library(dplyr) # With dplyr for example 
dt <- dt %>% group_by(gr) %>% 
    mutate(med = median(y)) 

# Rerun ggplot line with yintercept = med 
ggplot(dt, aes(x = as.factor(id), y = y)) + 
    geom_boxplot() + 
    facet_wrap(~ gr) + 
    geom_hline(aes(yintercept = med, group = gr), colour = 'red') 

enter image description here

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