मेरे पास 4 सिम्युलेटेड वेरिएबल्स की टाइमरीज है, इसके 4 प्रेक्षित वेरिएबल्स (देखे गए वेरिएबल्स में सिम्युलेटेड वेरिएबल्स की तुलना में कम डेटा है) जैसा कि निम्नलिखित लिंक में संलग्न है: https://www.dropbox.com/s/sumgi6pqmjx70dl/nutrients2. csv?dl=0

मैंने निम्नलिखित कोड का उपयोग किया, डेटा "डेटा 2" ऑब्जेक्ट में संग्रहीत है

data2 <- read.table("C:/Users/Downloads/nutrients2.csv", header=T, sep=",")

library(lubridate)
data2$Date <- dmy(data2$Date)

library(reshape2)
data2 <- melt(data2, id=c("Date","Type"))

seg2 <- ggplot(data = data2, aes(x = Date, y = value, group = Type, colour = Type)) +
        geom_line() +
        facet_wrap(~ variable, scales = "free") 
seg2

यह प्लॉट देता है (लाइन में सभी चर) प्लॉट प्राप्त किया

मुझे इस उदाहरण की तरह, बाधित लाइनों के बजाय बिंदुओं में देखे गए डेटा की आवश्यकता है वांछित प्लॉट

Ggplot में इस तरह की साजिश कैसे प्राप्त करें, (लाइन में नकली चर और अंक या बिंदुओं में देखे गए चर)?

1
Albert JML 16 अप्रैल 2020, 02:19

1 उत्तर

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

एक संभावित समाधान यह है कि आप अपने डेटासेट को क्रमशः geom_line और geom_point के लिए सब्मिट करें ताकि केवल sim और obs डेटा का उपयोग किया जा सके।

फिर, यदि आप अपने aes में shape = Type पास करते हैं, तो आप scale_shape_manual का उपयोग करके अपने लीजेंड में sim डेटा के लिए बिंदुओं को हटा सकते हैं:

(एनबी: मैंने data.table पैकेज से melt फ़ंक्शन का उपयोग किया क्योंकि मैंने इसे melt फ़ंक्शन reshape2 की तुलना में बड़े डेटासेट के लिए अधिक कुशल पाया)

library(lubridate)
df$Date <- dmy(df$Date)

library(data.table)
dt.m <- melt(setDT(df),measure = list(c("Nitrate","Ammonium","DIP","Chla")), value.name = "Values", variable.name = "Element")

library(ggplot2)
ggplot(dt.m, aes(x = Date, y = Values, group = Type, color = Type, shape = Type))+
  geom_line(data = subset(dt.m, Type == "sim"))+
  geom_point(data = subset(dt.m, Type == "obs"))+
  scale_shape_manual(values = c(16,NA))+
  facet_wrap(~Element, scales = "free")

enter image description here

0
dc37 15 अप्रैल 2020, 23:40