2012-05-12 7 views
11

मैं यहां क्या गलत कर रहा हूं? मैं पारदर्शी ग्रे के साथ वैकल्पिक 24-घंटे दैनिक आयताकार छाया करने की कोशिश कर रहा हूं। लेकिन फॉर-लूप से केवल अंतिम आयताकार खींचा जाता है (?!?) यदि मैं फॉर-लूप के बजाय मैन्युअल रूप से चीजें करता हूं तो यह ठीक काम करता है।ggplot2: प्लॉट पर वैकल्पिक दिनों को पारदर्शी रूप से छाया कैसे करें

क्या फॉर-लूप से बचने के लिए इसे सदिश करने का कोई तरीका है? (और यह qplot के साथ किया जा सकता है?) मैं ggplot2 के लिए नया हूं और हां मैंने हैडली की साइट, पुस्तक और उदाहरणों के माध्यम से पढ़ा है।

दूसरा मुद्दा: सौंदर्यशास्त्र पर अल्फा सेटिंग पृष्ठभूमि को घेरने वाले आयतों को रोकती नहीं है। पारदर्शिता कैसे प्राप्त करें?

dat <- data.frame(my_x_series=1:192, my_y_series=5.0*runif(192)) 
# (ymin, ymax are computed for this series using min/max(na.rm==TRUE)) 
ymax <- 5.0 
ymin <- 0.0 
p <- ggplot(dat, aes(x=my_x_series,alpha=0.9)) 
alternate_daily_bars_xmin <- c(4,52,100,148) 

for (shade_xmin in alternate_daily_bars_xmin) { 
    shade_xmax <- min(shade_xmin+24, 192) # clamp at end of x-range 
    p <- p + geom_rect(aes(alpha=0.5,xmin=shade_xmin,xmax=shade_xmax,ymin=ymin,ymax=ymax), fill='gray80') 
} 
p <- p + geom_point(aes(y=my_y_series)) 
p 
+0

जोड़ा * Dat * reproducibility के लिए के यादृच्छिक परिभाषा। यह कमांड सिंटैक्स है जो मुझे मार रहा है। मुझे लगता है कि प्रत्येक geom_rect कंपोजिटिंग के बजाए आखिरी ओवरराइड करता है जैसे आप उम्मीद कर सकते हैं। – smci

उत्तर

26

अपने आयतों को साजिश करने के लिए, एक डेटा फ्रेम बनाएं जहां प्रत्येक पंक्ति में एक आयताकार के लिए निर्देशांक होते हैं। यह निर्माण सभी बहुभुजों के लिए काम करता है, न केवल आयत। एक बार जब आप इसे जानते हैं, तो लूप से बचना आसान है।

फिर, सावधान रहें कि क्या आप एक चर को एक सौंदर्य में चिह्नित करते हैं या नहीं। आपके मामले में, आपको alpha को जो भी मूल्य चाहिए, उसे सेट करने की आवश्यकता है, इसलिए यह aes() सेटिंग्स का हिस्सा नहीं बनता है।

library(ggplot2) 

dat <- data.frame(my_x_series=1:192, my_y_series=5.0*runif(192)) 
rect_left <- c(4,52,100,148) 
rectangles <- data.frame(
    xmin = rect_left, 
    xmax = rect_left + 24, 
    ymin = 0, 
    ymax = 5 
) 

ggplot() + 
    geom_rect(data=rectangles, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), 
      fill='gray80', alpha=0.8) + 
    geom_point(data=dat, aes(x=my_x_series, y=my_y_series)) 

enter image description here

+0

सुंदर। क्या इनमें से कुछ या सभी * 'qplot()' * के साथ किए जा सकते हैं? – smci

+9

शायद यह सब, लेकिन मैंने कभी भी 'qplot' से परेशान नहीं किया है। 'ggplot' सीखना वास्तव में कठिन नहीं है, और आप हमेशा जानते हैं कि आपको क्या मिलेगा। माफ़ कीजिये। – Andrie

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