r - एक ही ग्राफ पर ggplot2 का उपयोग कर लाइनों के रूप में दो चर प्लॉटिंग




graph time-series (3)

एक बहुत ही नया सवाल है, लेकिन कहें कि मेरे पास इस तरह का डेटा है:

test_data <-
  data.frame(
    var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
    var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
    date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
  )

ggplot2 का उपयोग करके एक्स-अक्ष पर date साथ, मैं उसी ग्राफ पर दोनों समय श्रृंखला var0 और var1 को कैसे प्लॉट कर सकता हूं? बोनस पॉइंट्स यदि आप var0 और var1 अलग-अलग रंग बनाते हैं, और इसमें एक किंवदंती शामिल हो सकती है!

मुझे यकीन है कि यह बहुत आसान है, लेकिन मुझे वहां कोई उदाहरण नहीं मिल रहा है।


Ggplot2 के लिए आपको "विस्तृत" के बजाय डेटा को "लंबा" प्रारूप में होना चाहिए। "चौड़ा" का अर्थ है प्रत्येक चर के साथ प्रति पंक्ति एक अवलोकन एक अलग कॉलम के रूप में (जैसा कि अब आपके पास है)। आपको इसे "लंबा" प्रारूप में रूपांतरित करने की आवश्यकता है जहां आपके पास एक कॉलम है जो आपको चर का नाम और एक अन्य कॉलम बताता है जो आपको चर के मान को बताता है। व्यापक से लंबा तक गुजरने की प्रक्रिया को आमतौर पर "पिघलना" कहा जाता है। आप tidyr::gather उपयोग अपने डेटा फ्रेम पिघलने के लिए tidyr::gather कर सकते हैं:

library(ggplot2)
library(tidyr)

test_data <-
  data.frame(
    var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
    var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
    date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
  )
test_data %>%
    gather(key,value, var0, var1) %>%
    ggplot(aes(x=date, y=value, colour=key)) +
    geom_line()

gather माध्यम से इसे पाइप करने के बाद ggplot उपभोग करने वाले data साफ़ करने के लिए बस इस तरह दिखता है:

date        key     value
2002-01-01  var0    100.00000
2002-02-01  var0    115.16388 
...
2007-11-01  var1    114.86302
2007-12-01  var1    119.30996

अपने डेटा का उपयोग करना:

test_data <- data.frame(
var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
Dates = seq.Date(as.Date("2002-01-01"), by="1 month", length.out=100))

मैं एक स्टैक्ड वर्जन बना देता हूं जो ggplot() साथ काम करना चाहता है:

stacked <- with(test_data,
                data.frame(value = c(var0, var1),
                           variable = factor(rep(c("Var0","Var1"),
                                                 each = NROW(test_data))),
                           Dates = rep(Dates, 2)))

इस मामले में stacked उत्पादन करना काफी आसान था क्योंकि हमें केवल कुछ जोड़ों को करना था, लेकिन reshape2 reshape() और reshape2 और reshape2 उपयोगी हो सकता है यदि आपके पास अधिक जटिल वास्तविक डेटा सेट करने के लिए सेट किया गया है।

एक बार जब डेटा इस स्टैक्ड फॉर्म में होता है, तो उसे केवल एक अतिरिक्त ggplot() कॉल की आवश्यकता होती है जो आप सभी अतिरिक्त सुविधाओं के साथ साजिश का उत्पादन करने के लिए करते हैं (एक कारण है कि lattice और ggplot2 जैसे उच्च स्तरीय प्लॉटिंग पैकेज इतने उपयोगी हैं):

require(ggplot2)
p <- ggplot(stacked, aes(Dates, value, colour = variable))
p + geom_line()

धुरी लेबल, किंवदंती शीर्षक आदि को साफ करने के लिए मैं इसे छोड़ दूंगा।

HTH


सामान्य दृष्टिकोण डेटा को लंबे प्रारूप में परिवर्तित करना है melt() पैकेज reshape2 या reshape2 से melt() का उपयोग करके) या tidyr पैकेज से gather()

library("reshape2")
library("ggplot2")

test_data_long <- melt(test_data, id="date")  # convert to long format

ggplot(data=test_data_long,
       aes(x=date, y=value, colour=variable)) +
       geom_line()





r-faq