2014-07-04 15 views
5

Vấn đềNgày định dạng cho tập hợp con của bọ ve trên trục thời gian

Tôi muốn để định dạng của tôi trục X (thời gian) để những ngày cuối tuần là rõ ràng. Tôi muốn hiển thị ngày cũng như ngày trong tuần.

trạng

Tôi làm điều này với (mã đầy đủ dưới đây)

scale_x_date(breaks=myData$timestamp, 
    labels=paste(
    substr(format(myData$timestamp, "%a"),1,1), 
    format(myData$timestamp, "%d"), 
    sep="\n") 
) 

mà mang lại cho tôi

enter image description here

tình Wanted

Tôi muốn có chữ viết tắt một chữ cái cho các ngày trong tuần vì nó đã trở thành một chút chặt chẽ ở đó .. Ngoài ra, tôi muốn màu chủ nhật (và ngày lễ thực sự) màu đỏ. Đây là những gì tôi có ý nghĩa (được thực hiện với GIMP). Lưu ý cách Thứ Hai đầu tiên và Thứ Sáu cuối cùng được thêm vào bằng cách sử dụng

scale_x_date(breaks = "1 day", 
    minor_breaks = "1 days", 
    labels = date_format("%a\n%d"), 
    name="") 

Tuy nhiên, tôi nhận được ba chữ viết tắt của các ngày trong tuần mà tôi đã xóa trong GIMP.

enter image description here

Đây là mã hoàn chỉnh cho ví dụ này.

library(ggplot2) 
library(scales) 
library(reshape2) 

minimumTime <- as.Date("2014-07-01") 
maximumTime <- as.Date("2014-07-31") 

x <- seq(minimumTime,maximumTime, by="1 day") 
y1 <- sin(as.numeric(x)/3) 
y2 <- cos(as.numeric(x)/3) 

myData <- data.frame(timestamp=x, y1=y1, y2=y2) 
myData <- melt(myData, id.vars="timestamp") 

rects <- data.frame(saturdays=myData[weekdays(myData$timestamp) == "Saturday","timestamp"]-0.5, sundays = myData[weekdays(myData$timestamp) == "Saturday","timestamp"]+1.5) 

myPlot <- ggplot() + 
    geom_rect(data=rects, aes(xmin=saturdays, xmax=sundays,ymin=-Inf, ymax=Inf), alpha=0.1) + 
    geom_line(data=myData, aes(x=timestamp, y=value, colour=variable,size=1)) + 
    geom_point(data=myData, aes(x=timestamp, y=value, colour=variable,size=2)) + 
    scale_x_date(breaks=myData$timestamp, labels=paste(substr(format(myData$timestamp, "%a"),1,1),format(myData$timestamp, "%d"),sep="\n")) + 
    #scale_x_date(breaks = "1 day", minor_breaks = "1 days", labels = date_format("%a\n%d"), name="") + 
    scale_size_continuous(range = c(1.5,5), guide=FALSE) 

Vì vậy, để tổng hợp:

  • Có cách nào để phá vỡ màu sắc cụ thể về màu sắc khác?
  • Có cách nào thay đổi nhãn theo cách thủ công và vẫn có chúng cho Thứ Hai và Thứ Sáu lúc bắt đầu và kết thúc trong trường hợp này không?
  • Ngoài ra, nếu có một cách để có dòng mỗi nhãn làm trung tâm, đó sẽ là tuyệt vời :)

Cảm ơn bạn!

Trả lời

7

Bạn có thể sử dụng formater tùy chỉnh của bạn cho các nhãn cũng sử dụng breaks="1 day" đối số, bạn chỉ cần sử dụng function(x) sau labels=replace myDate$timestamp với x. Điều này cũng sẽ giải quyết vấn đề thứ ba.

+ scale_x_date(breaks="1 day", 
     labels= function(x) paste(substr(format(x, "%a"),1,1),format(x, "%d"),sep="\n")) 

Hoặc bạn có thể thực hiện chuyển đổi của mình làm chức năng riêng biệt và sau đó sử dụng nó cho labels=.

my_date_trans<-function(x) { 
     paste(substr(format(x, "%a"),1,1),format(x, "%d"),sep="\n") 
} 

+ scale_x_date(breaks="1 day",labels=my_date_trans) 

Để thay đổi màu cho nhãn bạn nên sử dụng theme()axis.text.x=. Ở đây tôi sử dụng vector của màu sắc có chứa 6 thời gian màu đen và sau đó màu đỏ như quy mô của bạn bắt đầu với thứ hai. Những màu đó sau đó được lặp lại.

ggplot() + 
     geom_rect(data=rects, aes(xmin=saturdays, xmax=sundays,ymin=-Inf, ymax=Inf), alpha=0.1) + 
     geom_line(data=myData, aes(x=timestamp, y=value, colour=variable,size=1)) + 
     geom_point(data=myData, aes(x=timestamp, y=value, colour=variable,size=2)) + 
     scale_x_date(breaks="1 day",labels=my_date_trans)+ 
     scale_size_continuous(range = c(1.5,5), guide=FALSE)+ 
     theme(axis.text.x=element_text(color=c(rep("black",6),"red"))) 

enter image description here

+1

Hey, đó là khá tốt đẹp! Cảm ơn! Nó không trả lời câu hỏi màu, nhưng tôi thực sự thích nó! – bytesinflight

+0

Câu trả lời độc đáo bằng văn bản, giải pháp làm sạch. Cảm ơn một lần nữa! – bytesinflight

+0

Đây là câu trả lời cực kỳ được đánh giá cao, một câu trả lời thực sự tốt :) Paldies – r0berts

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