2017-01-23 10 views
5

Tôi có một tập dữ liệu chuỗi thời gian được gọi là "Dữ liệu" chứa dữ liệu độ cao của nước cho một số giếng trong nhiều năm lấy mẫu. Người đứng đầu data.frame trông như thế này:Lỗi: Đầu vào không hợp lệ: date_trans hoạt động với các đối tượng của lớp Ngày chỉ

  Date   Well Elev 
1 2002-05-23   MW-3 929.04 
2 2002-05-29   MW-3 929.39 
3 2002-05-31   MW-3 929.37 
4 2002-06-05   MW-3 929.36 
5 2002-06-12   MW-3  NA 
6 2002-06-13   MW-3 929.47 
7 2002-06-19   MW-3 929.42 
8 2002-06-26   MW-3 930.02 
9 2002-07-05   MW-3 930.00 

Tôi cố gắng để sử dụng ggplot để vẽ độ cao nước theo thời gian cho từng giếng, đến nỗi tôi trục x là "Ngày" của tôi trục y là "Độ cao" và mỗi giếng được vẽ theo một màu khác. Tôi đã tạo ra cốt truyện này với mã dưới đây, và nó là sự hài lòng của tôi.

Vấn đề của tôi là tôi đang cố gắng che phủ hình chữ nhật màu xám với geom_rect để hiển thị các khoảng thời gian mà máy bơm giếng đã được bật. Tôi nghĩ rằng tôi rất thân thiết, nhưng tôi phải làm điều gì đó sai với định dạng ngày (?), Bởi vì tôi tiếp tục nhận được lỗi sau:

Error: Invalid input: date_trans works with objects of class Date only

Bất kỳ trợ giúp nào? Cảm ơn trước!

Đây là mã của tôi:

#Import and fix up data 
Data = read.csv("water_elevation_for_R_date.csv", stringsAsFactors=FALSE) 
colnames(Data)[1] <- "Date" 
Data$Date = as.Date(Data$Date, format = "%m/%d/%Y") 
Data$Well <- as.factor(Data$Well) 
Data$Elev <- as.numeric(Data$Elev) 

#Load ggplot and scales 
library(ggplot2) 
library(scales) 

#Create graph 
ggplot(data= Data, aes(x = Date, y = Elev, group = Well, colour = Well)) + 
geom_line(size = 0.75) + 
xlab("") + ylab("Elevation (ft.)") + 
scale_color_brewer(palette = "Spectral") + 
scale_x_date(breaks = date_breaks("2 year"), 
      labels = date_format("%Y")) + 
theme_bw()+ 
theme(plot.background = element_blank(), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     panel.border = element_blank(), 
     axis.line.x = element_line(color = "black"), 
     axis.line.y = element_line(color = "black")) + 
geom_rect(data = Data, 
      aes(xmin = "2004-04-29", 
       xmax = "2004-12-20", 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "gray", 
      alpha = 0.5) 
+0

bạn có thể cung cấp sản lượng của 'dput (dữ liệu)'? –

+0

Hi J. Con, Xin lỗi-- Tôi mới đăng bài ở đây và đầu ra của 'dput (Data)' quá dài cho cả nhận xét và bài đăng gốc. Bất kỳ đề xuất về làm thế nào để giúp bạn có được đầu ra? – snalven

+0

Đọc phần này để biết một số mẹo. https://www.r-bloggers.com/three-tips-for-posting-good-questions-to-r-help-and-stack-overflow/ –

Trả lời

4

Vấn đề có vẻ là trong lĩnh vực geom_rect của bạn (nó âm mưu không có điều này). Các lỗi "date_trans" khác on this site cần thiết để đặt ngày với as.Date. Vì vậy, có, bạn đã ở trong khu vực gỡ lỗi thích hợp. Đây hoạt động:

Quấn tối thiểu và tối đa trong xmin xmax và cuộc gọi trong geom_rect phần:

aes(xmin = as.Date("2004-04-29", "%Y-%m-%d"), 
    xmax = as.Date("2004-12-20", "%Y-%m-%d"), 

MÃ DƯỚI ĐÂY ĐỂ người khác sử dụng

Tôi tạo ra ba dòng dữ liệu chỉ như @YourEconProf gợi ý .

#Import and fix up data 
#Data = read.csv("water_elevation_for_R_date.csv", stringsAsFactors=FALSE) 
#Date   Well Elev 
#1 2002-05-23   MW-3 929.04 
#2 2002-05-29   MW-3 929.39 
#3 2002-05-31   MW-3 929.37 
# etc... 
Data = data.frame(Date = c(as.Date("2002-05-23", "%Y-%m-%d"), 
          as.Date("2002-05-29", "%Y-%m-%d"), 
          as.Date("2002-05-31", "%Y-%m-%d")), 
        Well = c("MW-3","MW-3","MW-3"), 
        Elev = c(929.04, 929.39, 929.37)) 

colnames(Data)[1] <- "Date" 
Data$Date = as.Date(Data$Date, format = "%m/%d/%Y") 
Data$Well <- as.factor(Data$Well) 
Data$Elev <- as.numeric(Data$Elev) 

#Load ggplot and scales 
library(ggplot2) 
library(scales) 

#Create graph 
ggplot(data= Data, aes(x = Date, y = Elev, group = Well, colour = Well)) + 
    geom_line(size = 0.75) + 
    xlab("") + ylab("Elevation (ft.)") + 
    scale_color_brewer(palette = "Spectral") + 
    scale_x_date(breaks = date_breaks("2 year"), 
       labels = date_format("%Y")) + 
    theme_bw()+ 
    theme(plot.background = element_blank(), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     panel.border = element_blank(), 
     axis.line.x = element_line(color = "black"), 
     axis.line.y = element_line(color = "black")) + 
    geom_rect(data = Data, 
      aes(xmin = as.Date("2004-04-29", "%Y-%m-%d"), 
       xmax = as.Date("2004-12-20", "%Y-%m-%d"), 
       ymin = -Inf, 
       ymax = Inf), 
      fill = "gray", 
      alpha = 0.5) 

nào giúp bạn này:

3lines of data chart

+1

Cảm ơn rất nhiều micstr! Tôi đã thử bằng cách sử dụng as.Date nhưng không nhận ra tôi đã phải xác định định dạng. – snalven

+0

Xin chào, tôi thấy bạn mới làm quen với SO. Nếu bạn cảm thấy câu trả lời của tôi đã giải quyết được vấn đề, vui lòng đánh dấu câu trả lời là 'được chấp nhận' bằng cách nhấp vào dấu kiểm màu xanh lục. Cảm ơn. – micstr

Các vấn đề liên quan