मैंने किसी अन्य पोस्ट से उदाहरण डेटा उधार लिया और मेरी स्थिति के अनुरूप संशोधित किया। (सप्ताहांत को चित्रित करने के लिए गैंट चार्ट में छायांकन जोड़ें )

गैंट चार्ट बनाने में मेरी समस्या यह है कि मेरे डेटा में श्रेणी के भीतर कई अवधि शामिल हैं। नीचे दिए गए नमूने में, मैंने "परिचय लिखें" के लिए दो और अवधियां जोड़ीं और "परिणाम लिखें" के लिए एक और अवधि जोड़ी।

साथ ही, मैं उन विशिष्ट अवधियों को रंगना चाहता हूं जो मानदंडों को पूरा करती हैं। यहां, यदि किसी अवधि का कोई हिस्सा मई या अगस्त में पड़ता है, तो मैंने उसे हरी झंडी दिखाई।

ऐसा लगता है कि एक श्रेणी में दो अवधि तक ठीक काम करता है। लेकिन जब तीन काल होते हैं, तो वे एक ही अवधि में विलीन हो जाते हैं?!

मेरा वास्तविक डेटासेट एक श्रेणी के साथ बहुत अधिक जटिल है जिसमें कभी-कभी 10 से अधिक अवधि होती है, फ़्लैगिंग के लिए बहुत परिभाषित मानदंड के साथ।

मुझे यकीन नहीं है कि मैं इस मुद्दे को कैसे हल कर सकता हूं।

enter image description here


require(reshape2)
require(ggplot2)


# Create a list of tasks name strings.
tasks <- c("Write introduction", "Parse citation data",
           "Construct data timeline",
           "Write methods", "Model formulation", 
           "Model selection", "Write results", "Write discussion",
           "Write abstract and editing",
           
           "Write introduction", "Write introduction", "Write results")

# Compile dataframe of task names, and respective start and end dates.
dfr <- data.frame(
  name = factor(tasks, levels = tasks[1:9]),
  start.date = as.Date(c("2018-04-09", "2018-04-09", "2018-04-16",
                         "2018-04-30", "2018-04-16", "2018-05-21",
                         "2018-06-04", "2018-07-02", "2018-07-30",
                         
                         "2018-05-15", "2018-06-03", "2018-07-25"
                         )),
  end.date = as.Date(c("2018-04-30", "2018-04-20", "2018-05-18",
                       "2018-06-01", "2018-05-18", "2018-06-01",
                       "2018-06-29", "2018-07-27", "2018-08-31",
                       
                       "2018-05-29", "2018-06-20", "2018-08-15")),
  flag = c(0, 0, 1, 
           1, 1, 1,
           0, 0, 1, 
           1, 0, 1)
)

# Merge start and end dates into durations.
mdfr <- melt(dfr, measure.vars = c("start.date", "end.date"))



# gannt chart

ggplot(mdfr) +
  
  geom_line(aes(value, name, colour = as.factor(flag)), size = 4) +
  labs(title = "Project gantt chart",
       x = NULL,
       y = NULL) +
  theme_minimal() 

0
user5813583 15 अक्टूबर 2020, 04:57

2 जवाब

सबसे बढ़िया उत्तर

geom_line दृष्टिकोण काम करना चाहिए यदि आप प्रारंभ / समाप्ति तिथियों की प्रत्येक जोड़ी के लिए एक पहचानकर्ता बनाए रखते हैं, और निर्दिष्ट करते हैं कि समूह चर के रूप में ताकि ggplot को पता चले कि कौन से निर्देशांक एक ही पंक्ति से संबंधित हैं:

dfr$row.id <- seq(1, nrow(dfr)) # use row id to identify each original row uniquely
mdfr <- melt(dfr, measure.vars = c("start.date", "end.date"))

ggplot(mdfr,
       aes(x = value, y = name, colour = factor(flag), group = row.id)) + # add group aesthetic
  geom_line(size = 4) +
  labs(title = "Project gantt chart",
       x = NULL,
       y = NULL) +
  theme_minimal() 

plot

1
Z.Lin 15 अक्टूबर 2020, 07:03

मैंने इसे पिघलाकर और geom_line . के बजाय geom_linerange का उपयोग करके हल किया

ggplot(dfr) +
  geom_linerange(aes(y = name, 
                     xmin = start.date,
                     xmax = end.date,
                     colour = as.factor(flag)),
                 
                 size = I(5)) +
  theme_minimal()

फिर भी, यह जानना अच्छा होगा कि इसने geom_line के साथ काम क्यों नहीं किया। अगर कोई इसमें मेरी मदद कर सकता है, तो मैं इसकी बहुत सराहना करूंगा!

enter image description here

1
user5813583 15 अक्टूबर 2020, 06:34