2014-04-22 2 views
1

수신 된 메시지 수와 수신 된 시간 수를 플로팅합니다. 예를 들어 , 내 데이터 (I는 CSV에서 읽을 수있는) 다음과 같습니다 : 하루 동안 여러 시간을R ggplot2 데이터가 끊기보다 작을 때 x 축 datetime이 깨집니다.

timestamp count 
1398094330 286 
1398094340 6279 
1398094350 447 
1398094360 946 
1398094370 719 
1398094380 171 
1398094390 4 
1398094400 42 
1398094420 2 

일반적으로, 데이터에 걸쳐하지만, 가끔 시간의 작은 창 등으로 제한됩니다 위의 예.

데이터가 일반적으로 그 날에 걸쳐 있기 때문에, scale_x_datetime의 휴식 시간을 "10 mins"으로 설정하여 나의 사용 사례의 99 %를 사용할 수 있습니다. 그러나이 경우 실패합니다.

gagplot은 x 축 틱을 표시하지 않으므로 모든 데이터가 약 1 분 동안이 날에 발생하므로 내 휴식 시간이 10 분이므로 실패라고 정의합니다.

결과 ggplot 그래프를 볼 때 메시지가 언제 나타나는지 모르기 때문에 이것은 분명히 유용하지 않습니다.

나는 다른 모든 것이 제대로 작동하지만,이 예제에서는 어떤 종류의 x 축 눈금 마크 표시 방법을 알아낼 수 없습니다.

나는 꽤 들여다 보았지만, 그게 datetime에서 작동하지 않는 것 같습니다. 휴식 시간을 줄이면 다른 모든 그래프가 복잡 해지고보기가 흐려집니다.

코드 :

tmp = read.csv(args[1]) 
tmp$time = as.POSIXct(tmp$timestamp, "1970-1-1", tz="America/New_York") 
p = ggplot() 
p = p + geom_point(tmp, mapping=aes(x=time, y=count), size=1.5) 
p = p + scale_y_log10() 
p = p + scale_x_datetime(breaks=date_breaks("10 mins"), labels=date_format("%H:%M:%S")) 
p = p + theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.5)) 
p = p + labs(title=paste("Message Count, 10 Second Intervals \n", name)) 

dput : 당신은 많은 초 최대 및 timestamp 값의 최소값 사이에 얼마나 확인하는 date_breaks() 내부 ifelse() 문을 포함 할 수

structure(list(timestamp = c(1398094330L, 1398094340L, 1398094350L, 1398094360L, 1398094370L, 1398094380L, 1398094390L, 1398094400L, 1398094420L), count = c(286L, 6279L, 447L, 946L, 719L, 171L, 4L, 42L, 2L), time = structure(c(1398094330, 1398094340, 1398094350, 1398094360, 1398094370, 1398094380, 1398094390, 1398094400, 1398094420), class = c("POSIXct", "POSIXt"), tzone = "America/New_York")), .Names = c("timestamp", "count", "time"), row.names = c(NA, -9L), class = "data.frame") 
+0

참고 : R 버전 3.0.2 – user1324855

+0

데이터의'dput'을 사용하고 있으며 시도한 것의 "작동하는"코드가 도움이 될 것입니다. – hrbrmstr

+0

수정 된 코드를 내 게시물에 추가하십시오. "dput"이 무엇인지에 대한 확신이 없음 – user1324855

답변

1

. 차이가 600 (10 분) 미만이면 "1 mins"이 나누기에 사용되지만 그보다 큰 경우 "10 mins"이 사용됩니다.

ggplot() + geom_point(tmp, mapping=aes(x=time, y=count), size=1.5) + 
    scale_y_log10() + 
    scale_x_datetime(breaks=date_breaks(ifelse(max(tmp$timestamp)-min(tmp$timestamp)<600,"1 mins","10 mins")), 
        labels=date_format("%H:%M:%S")) + 
    theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.5)) 
+0

이것은 본질적으로 내가 한 일입니다. 나는 R로 읽고 있던 CSV를 생성하는 또 다른 프로그램을 가지고 있는데, 나는 date_breaks를 사용하도록 계산했다. 이러한 변경 사항을 되돌릴 수 있지만이 솔루션을 그대로 사용하십시오. – user1324855