आर

2012-05-10 6 views
6

में एक साल योजनाकार प्लॉटिंग मैं एक और सामान्य मामले में my own answer on drawing Gantt Charts का विस्तार करने की कोशिश कर रहा हूं।आर

Year planner in R

यात्राएं की संख्या प्रस्थान का प्रतिनिधित्व लाल अंक, और हरे रंग की डॉट्स की वापसी के साथ, इस चार्ट पर साजिश रची है: मैं यहाँ एक आंशिक परिणाम दर्शाते हैं। अब मेरी चुनौती है:

  1. मैं प्रस्थान के दौरान और ग्रे ग्रे पॉइंट के साथ वापसी के दौरान सभी दिन चिह्नित करना चाहता हूं, और अन्य सभी को छूटे रहना चाहता हूं।
  2. मैं अंक को अलग-अलग महीने की लंबाई के आसपास सही ढंग से लपेटना चाहता हूं (उदाहरण के लिए प्रस्थान 28 जून दिन 30 जून को चिह्नित करेगा और फिर 1 जुलाई तक लपेट जाएगा)।
  3. स्क्रिप्ट एक दिवसीय यात्रा के मामले में विफल नहीं होना चाहिए (उदाहरण के लिए सितंबर के आरंभ में यात्रा जहां प्रस्थान और वापसी उसी दिन होती है और एक छोटे से हरे रंग के बिंदु को एक बड़े लाल मार्कर पर प्लॉट किया जाता है)।

इस ग्राफ को नीचे दिए गए कोड के साथ उत्पादित करना मुश्किल है, और लाल रंग से हरे रंग की रेखा के साथ बिंदुओं में शामिल होना आसान होगा, जहां दोनों एक ही महीने में होते हैं। क्या कोई भी लपेटने और गैर-छलांग वर्ष आदि लेने के लिए सामान्य तरीके से एक लपेटने के मामले में मदद कर सकता है?

library("ggplot2") 

# ---------------- 
# LOAD DATA 

df <- read.table(text='id,dep_month,dep_day,ret_month,ret_day 
c,1,5,1,16 
v,2,1,2,6 
a,3,28,3,31 
z,4,9,4,11 
y,4,25,5,3 
f,6,28,7,7 
w,8,19,8,29 
b,9,9,9,9 
k,9,29,10,6 
n,11,20,12,3', header = TRUE, 
       sep = ',') 

# ---------------- 
# DRAW YEAR CHART 

p <- ggplot(data = df, 
      aes(x = dep_day, 
       y = dep_month 
       ) 
      ) 
p <- p + theme_bw() 
p <- p + geom_point(colour = 'red', 
        size = 6) 
p <- p + geom_point(aes(x = ret_day, 
         y = ret_month 
         ), 
        colour = 'green', 
        size = 4 
        ) 
p <- p + scale_x_continuous(breaks = c(1:31)) 
p <- p + scale_y_reverse(breaks = c(1:12)) 
p <- p + ylab("Month") + xlab("Day") 
print(p) 

उत्तर

5
शायद नहीं

सही समाधान है, लेकिन बहुत आसान हो, जब तुम date वस्तुओं का उपयोग सोचता है:

# using your data.frame 
# create date object using the dep_month, dep_day etc columns 
df$dep.date = as.Date(paste('2012', df$dep_month, df$dep_day, sep='-')) 
df$ret.date = as.Date(paste('2012', df$ret_month, df$ret_day, sep='-')) 

# calculate the dates for the gray data points between departure and return 
# there is probably a more R'ish ways, than a for loop 
days <- NULL 
for(i in seq(1, nrow(df))){ 
    tmp <- seq.Date(df[i,]$dep.date, df[i,]$ret.date, by='days') 
    days <- rbind(days, 
     data.frame(day = as.POSIXlt(tmp)$mday, 
      mon = as.POSIXlt(tmp)$mon+1)) 
} 

# plot it 
p <- ggplot(days, aes(day, mon)) + geom_point(colour='gray66') + theme_bw() + 
geom_point(data = df, aes(dep_day, dep_month), colour = 'red', size = 6) + 
geom_point(data = df, aes(ret_day, ret_month), 
       colour = 'green', size = 4) + 
scale_x_continuous(breaks = c(1:31)) + 
scale_y_reverse(breaks = c(1:12)) + 
ylab("Month") + xlab("Day") 
print(p) 

enter image description here

+1

धन्यवाद, @smu, कि सबसे सुंदर, बहुत से किसी की तुलना में बेहतर है मेरे प्रयास – gauden