2013-07-20 35 views
11

Tôi có "dữ liệu hàng tháng" Tôi muốn vẽ dữ liệu sao cho tôi nhận được ngày theo định dạng %Y-%m" (2001-01) trên trục x. Giả sử dữ liệu của tôi là pcp <- rnorm(24).ô chuỗi thời gian có trục x trong "năm" - "tháng" trong R

Tôi đã thử:

PCP <- ts(pcp, frequency = 12, start = 2001) 
plot(PCP) 

nhưng cốt truyện chỉ có năm trên trục x.

Làm thế nào để tôi có được một âm mưu với định dạng ngày tôi mong muốn trên trục x?

+0

Tôi rút lại phiếu bầu của mình để đóng nhưng vui lòng đưa vào một số công việc để đặt câu hỏi [reproducible] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). 'PCp' là gì? –

+0

Câu hỏi không được trả lời trước đây của tôi, đó là câu hỏi hoàn toàn khác ở đây tôi hỏi về cốt truyện, cách làm như vậy mà trục x bao gồm các tháng không chỉ năm – mms

+0

@MarwahSoliman một câu hỏi hay sẽ là có thể tái sản xuất. Bạn nên có một cái gì đó như 'pcp <- norm (24)' ở trên mã của bạn, để các folks có thể thực thi 'PCP' và' plot (PCP) '. Điều này có thể tránh được những downvotes. Cuối cùng, bạn nên chọn một câu trả lời và chọn đánh dấu để chấp nhận nó - bạn nhận được tình trạng cho chính mình, và khi tình trạng của bạn xây dựng folks sẽ cung cấp cho câu hỏi của bạn quan tâm hơn. – ricardo

Trả lời

10

Tôi thấy tuyệt vời xts gói là cách tốt nhất để lưu trữ dữ liệu của bạn . Nếu bạn chưa có, bạn có thể tải xuống với install.packages('xts').

Hãy bắt đầu từ những điều cơ bản - bao gồm cả việc thực hiện pcp, vì bạn chưa cung cấp.

require(xts) 
pcp <- rnorm(24) 
PCP <- ts(pcp, frequency = 12, start = 2001) 
plot(as.xts(PCP), major.format = "%Y-%m") 

Điều này cung cấp cho bạn biểu đồ tương tự như sau. Bạn có thể tinh chỉnh ngày bằng cách thay đổi chuỗi được chuyển đến major.format. Ví dụ, "%b-%y" mang lại ngày theo định dạng Jan-01 cho Jan 2001.

example plot

+0

Cũng lưu ý rằng [gói xtsExtra trên R-Forge] (http: //r-forge.r- project.org/R/?group_id=118) có một số cải thiện âm mưu cho các đối tượng xts. –

11

Đây là ý tưởng với dữ liệu đồ chơi vì câu hỏi không thể lặp lại được. Hy vọng rằng nó sẽ giúp

R> foo = ts(rnorm(36), frequency = 12, start = 2001) 
R> plot(foo, xaxt = "n") 
R> tsp = attributes(foo)$tsp 
R> dates = seq(as.Date("2001-01-01"), by = "month", along = foo) 
R> axis(1, at = seq(tsp[1], tsp[2], along = foo), labels = format(dates, "%Y-%m")) 

Output

phiên bản ggplot với dữ liệu mà trông giống như bạn

R> df = data.frame(date = seq(as.POSIXct("2001-01-01"), by = "month", length.out = 36), pcp = rnorm(36)) 
R> library(ggplot2) 
R> library(scales) 
R> p = ggplot(data = df, aes(x = date, y = pcp)) + geom_line() 
R> p + scale_x_datetime(labels = date_format("%Y-%m"), breaks = date_breaks("months")) + theme(axis.text.x = element_text(angle = 45)) 

enter image description here

2

Cách tốt nhất là sử dụng axis.POSIXct {graphics} Ở đây ví dụ từ sự giúp đỡ của chức năng này:

with(beaver1, { 
time <- strptime(paste(1990, day, time %/% 100, time %% 100), 
       "%Y %j %H %M") 
plot(time, temp, type = "l") # axis at 4-hour intervals. 
# now label every hour on the time axis 
plot(time, temp, type = "l", xaxt = "n") 
r <- as.POSIXct(round(range(time), "hours")) 
axis.POSIXct(1, at = seq(r[1], r[2], by = "hour"), format = "%H") 
}) 

tại của bạn trường hợp thay đổi định dạng thành format="%Y-%m"

Kính trọng,

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