2012-06-12 4 views
4

내 데이터 w.r.t.의 시간별 빈도에 대한 개요를 얻으려고합니다. 평일. 따라서 다른 날짜를 하나의 하루로 압축하여 시간 만 다를뿐 아니라 요일을 정렬 된 요소로 나타내는 열을 추가했습니다.ggplot의 밀도 플롯에서 x 축을 조정하는 방법은 무엇입니까?

my.log <- structure(list(Prorated = structure(c(1339535400, 1339536540, 1339524540, 1339480320, 1339537920, 1339529580, 1339500780, 1339532820, 1339522020, 1339522680, 1339465560, 1339529940, 1339472880, 1339508520, 1339519620, 1339536000, 1339526580, 1339514940, 1339518060, 1339512420, 1339513080, 1339500120, 1339543620, 1339485660, 1339496280, 1339526520, 1339514820, 1339531800, 1339531860, 1339501320), class = c("POSIXct", "POSIXt"), tzone = "%Y-%m-%d %H:%M:%S"), Wday = structure(c(1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 3, 4, 1, 1, 3, 3, 4, 4, 5, 5, 5, 1, 2, 2, 2), .Label = c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"), class = c("ordered", "factor"))), .Names = c("Prorated", "Wday"), row.names = c(NA, 30), class = "data.frame") 

range(my.log$Prorated) 
# here (n = 30): 
# [1] "2012-06-12 01:46:00" "2012-06-12 23:27:00" 
# w/ full data set (n = approx. 75000): 
# [1] "2012-06-12 00:00:00" "2012-06-12 23:59:00" 

지금 다음 코드 밀도 플롯을 플롯하려고 ...

library("ggplot2") 
library("scales") 
p <- ggplot(my.log) + theme_bw() + 
    geom_density(aes(Prorated, colour=Wday)) + 
    scale_color_brewer("weekday", palette="Dark2") + 
    scale_x_datetime("", breaks=date_breaks("4 hours"), 
    labels=date_format("%H:00")) + 
    opts(title="Distribution (KDE)") 
print(p) 

... X 축 :

다음 내 데이터의 추출이다 두 데이터 세트가 모두 인 경우은 00:00에 시작하지 않고 02:00에 시작하므로 전체 밀도 플롯이 다음 날로 이동됩니다. (내가 여기에 이미지를 게시하고 싶었지만 내가 그렇게 할 수 없기 때문에 ImageShack에서 찾을 수있다)

그러므로 내 질문 : qqplot()에게 00:00시에 밀도 그래프를 시작해야합니까?

나는 related questions (또는 각각 답변)에 대해 SO를 확인했지만 찾을 수 없습니다. 내 마음에 오는 유일한 옵션은 xlim() 또는 scale_x_continuous(limits=...)입니다. 그러나 내가 이해할 때까지는 여기 모두 올바른 것이 아닙니다.

전자는 입력 data.frame의 모든 데이터가 이미 올바른 범위에 있기 때문에 데이터 포인트를 삭제합니다. 후자는 시점을 전환하기 때문에 결과적으로 23:59에 그래프가 잘립니다. 나는 위의 코드에

를 사용하는 경우, 처음에이 (지금은 숨김) 데이터 포인트를 추가 ... 그래서 않고, 그래프/모든 데이터를 표시하지 않습니다 잘못된 보인다.

+0

중복 가능성 [ggplot scale_datetime에 대한 적절한 시간대 인수 구문() 란 0.9.0 (http://stackoverflow.com/questions/10339618/what-is-the -appropriate-timezone-argument-syntax-for-scale-datetime-in-ggplot) –

답변

4

시간대 문제입니다. 이 관련 질문을 참조 : What is the appropriate timezone argument syntax for scale_datetime() in ggplot 0.9.0

당신은 function(x) format(x, "%H:00", tz="UTC") (또는 아마도 다른 적절한 시간대)에 labels 인수를 변경하여 해결할 수 있습니다. 데이터 프레임의 POSIXt 열에 잘못 구성된 tzone 특성이 있었기 때문에 예제 데이터를 변경해야했습니다.

ggplot(my.log) + theme_bw() + 
    geom_density(aes(Prorated, colour=Wday)) + 
    scale_color_brewer("weekday", palette="Dark2") + 
    scale_x_datetime("", breaks=date_breaks("4 hours"), 
    labels=function(x) format(x,"%H:00",tz="UTC")) + 
    opts(title="Distribution (KDE)") 

enter image description here

+0

당신이 가리킨 글을 읽었지 만,이 이상한 오프셋의 유일한 이유는 내가 그렇다는 사실에 대해 생각하지 않았습니다. _UTC + 2_에. 고마워요! – FlipR

+0

_ 데이터 프레임의 POSIXt 열에 잘못된 형식의 tzone 특성이 있기 때문에 예제 데이터를 변경해야했습니다. - 여기 R의 새로운 인스턴스에 질문을 게시하기 전에 코드를 시도하고 PC에서 작동했습니다 ... 죄송합니다 – FlipR

관련 문제