2012-03-15 5 views
-4

나는 몇 달 동안 날짜와 CPU 사용 데이터가있는 데이터 프레임을 가지고 있습니다. 나는이 같은 부드럽게 gplot를 만들 수 있습니다읽을 수있는 형식으로 xaxis에 날짜 표시 R

qplot(Date, CPU, data=app1, geom=c("line", "smooth"), method = "lm", 
    ylab="CPU", xlab="Date", main=") 

이이 날짜를 표시하지 않습니다, 그것은 단지 날짜의 몇 가지를 보여줍니다. 날짜가 평활선보다 크거나 작은 경우처럼 중요한 날짜를 표시 할 수 있습니까?

다시, 나는 너무 많은 질문을하는 경우 미안합니다. 나는 R을 배우고 처음 고통을 겪고 있습니다. 당신이 원하는 것은 아직 명확하지 않다

Date CPU 


3/10/2012 0:00 28.7 
3/9/2012 0:00 94.1 
3/2/2012 0:00 82.7 
2/23/2012 0:00 68.5 
2/22/2012 0:00 67.4 
2/10/2012 0:00 100 
2/6/2012 0:00 100 
2/4/2012 0:00 89.4974 
2/3/2012 0:00 100 
2/1/2012 0:00 100 
1/29/2012 0:00 57.4693 
1/25/2012 0:00 100 
1/21/2012 0:00 98.2085 
1/20/2012 0:00 99.9987 
1/19/2012 0:00 99.9698 
1/17/2012 0:00 99.9802 
1/15/2012 0:00 51.5781 
1/14/2012 0:00 86.5854 
1/12/2012 0:00 100 
1/10/2012 0:00 100 
1/8/2012 0:00 48.3474 
1/6/2012 0:00 99.9833 
1/5/2012 0:00 100 
1/2/2012 0:00 100 
12/31/2011 0:00 99.6901 
12/25/2011 0:00 76.543 
12/21/2011 0:00 99.9536 
12/19/2011 0:00 100 
12/16/2011 0:00 99.9807 
12/14/2011 0:00 99.9995 
12/6/2011 0:00 100 
3/8/2012 0:00 83.2 
3/7/2012 0:00 67.7 
3/6/2012 0:00 70.8 
3/5/2012 0:00 92.6 
2/27/2012 0:00 77.3 
2/24/2012 0:00 74.1 
2/21/2012 0:00 79.3 
2/19/2012 0:00 57.8052 
2/18/2012 0:00 99.9938 
2/14/2012 0:00 100 
2/9/2012 0:00 100 
2/8/2012 0:00 100 
2/7/2012 0:00 100 
2/5/2012 0:00 57.478 
2/2/2012 0:00 100 
1/31/2012 0:00 100 
1/30/2012 0:00 100 
1/28/2012 0:00 87.604 
1/27/2012 0:00 100 
1/24/2012 0:00 100 
1/23/2012 0:00 100 
1/18/2012 0:00 100 
1/16/2012 0:00 99.9477 
1/13/2012 0:00 99.9979 
1/9/2012 0:00 100 
1/7/2012 0:00 92.6704 
1/4/2012 0:00 100 
1/3/2012 0:00 100 
1/1/2012 0:00 17.501 
12/28/2011 0:00 100 
12/27/2011 0:00 100 
12/23/2011 0:00 99.999 
12/22/2011 0:00 100 
12/20/2011 0:00 99.9865 
12/18/2011 0:00 8.2211 
12/15/2011 0:00 100 
+5

읽어 보시기 바랍니다에 대한 질문을하기 전에 (http://stackoverflow.com/q/5963269/324364) [재현 예제를 만드는 방법]. 또한, 다른 사람들에게 당신을 위해 그것을 요청하기 전에 시도를 한 것에 대한 어떤 징후를 보여 주면 더 유리한 반응을 얻을 것입니다. – joran

+0

날짜가 평활선보다 크거나 작 으면 어떤 의미입니까? – Ben

+0

공간이 부족하여 xaxis에 모든 날짜를 표시 할 수 없습니다. 어쩌면 나는 CPU가 움직일 때 날짜를 표시하려고 생각하고있다. 부드러운 라인 –

답변

6

,하지만 난 그것을 자상 할게요 :

데이터는 다음과 같습니다.

데이터 세트를 재현 할 수 있도록 만들어 보겠습니다.

app1 <- 
structure(list(Date = structure(c(15409, 15408, 15401, 15393, 
15392, 15380, 15376, 15374, 15373, 15371, 15368, 15364, 15360, 
15359, 15358, 15356, 15354, 15353, 15351, 15349, 15347, 15345, 
15344, 15341, 15339, 15333, 15329, 15327, 15324, 15322, 15314, 
15407, 15406, 15405, 15404, 15397, 15394, 15391, 15389, 15388, 
15384, 15379, 15378, 15377, 15375, 15372, 15370, 15369, 15367, 
15366, 15363, 15362, 15357, 15355, 15352, 15348, 15346, 15343, 
15342, 15340, 15336, 15335, 15331, 15330, 15328, 15326, 15323 
), class = "Date"), CPU = c(28.7, 94.1, 82.7, 68.5, 67.4, 100, 
100, 89.4974, 100, 100, 57.4693, 100, 98.2085, 99.9987, 99.9698, 
99.9802, 51.5781, 86.5854, 100, 100, 48.3474, 99.9833, 100, 100, 
99.6901, 76.543, 99.9536, 100, 99.9807, 99.9995, 100, 83.2, 67.7, 
70.8, 92.6, 77.3, 74.1, 79.3, 57.8052, 99.9938, 100, 100, 100, 
100, 57.478, 100, 100, 100, 87.604, 100, 100, 100, 100, 99.9477, 
99.9979, 100, 92.6704, 100, 100, 17.501, 100, 100, 99.999, 100, 
99.9865, 8.2211, 100)), .Names = c("Date", "CPU"), row.names = c(NA, 
-67L), class = "data.frame") 

여기에서 Date 열은 Date 클래스입니다. 그게 당신이 가지고있는 것인지 아닌지 모르겠습니다 (게시 한 내용에서 알 수 없으므로 완전히 재현 가능한 예제가 요청 된 것입니다).

당신의 qplot 구문 ggplot에 구문을 변환 (그리고 나는 무슨 일이 쉽게 벌어지고 볼 수 있도록 포인트 추가) :

ggplot(app1, aes(x=Date, y=CPU)) + 
    geom_point() + 
    geom_line() + 
    geom_smooth(method="lm") 

enter image description here

귀하의 의견

이되지 않습니다 날짜를 보여 주며, 단지 몇 개의 날짜를 보여줍니다. 날짜가 평활선보다 크거나 작은 경우처럼 중요한 날짜를 표시 할 수 있습니까?

은 혼란 스럽습니다. 물론 x 축에는 일부 날짜 만 표시됩니다. 당신은 모든 지점을 분류하고 싶지 않을 것입니다. 그리고 모든 점은 매끄러운 선의 한면 또는 다른면에있을 것입니다. 그래서 저는 그래프에 그려진 신뢰 구간을 벗어나는 그래프에 포인트를 표시하는 것으로 귀하의 요청을 해석 할 것입니다. 이것이 당신이 의미하는 것이 아니라면, 당신은 더 자세한 내용을 제공해야합니다.

이렇게하려면 ggplot2을 모델링하지 말고 직접해야합니다.

mdl <- lm(CPU~Date, data=app1) 
app2 <- cbind(app1, predict(mdl, interval="confidence")) 

이렇게하면 원래 그래프를 재현 할 수 있습니다. 어떤 사람은 극단적하고 표시해야합니다으로

enter image description here

ggplot(app2, aes(x=Date)) + 
    geom_point(aes(y=CPU)) + 
    geom_line(aes(y=CPU)) + 
    geom_smooth(aes(y=fit, ymin=lwr, ymax=upr), stat="identity") 

지금이 별도의 데이터 세트로, 당신은 더 포인트 주석을 달 수 있습니다.
app2 <- transform(app2, 
        extreme = (CPU < lwr) | (CPU > upr)) 

ggplot(app2, aes(x=Date)) + 
    geom_point(aes(y=CPU)) + 
    geom_line(aes(y=CPU)) + 
    geom_smooth(aes(y=fit, ymin=lwr, ymax=upr), stat="identity") + 
    geom_text(aes(label=as.character(Date), y=CPU), data=app2[app2$extreme,], 
      size=3, angle=90) 

enter image description here

당신이 친절하게 텍스트의 더 많은 서식을 할 수

. 한 가지 예가 있습니다.

app2 <- transform(app2, 
        hadj = ifelse(extreme, ifelse(CPU < lwr, 1.1, -0.1), NA)) 

ggplot(app2, aes(x=Date)) + 
    geom_point(aes(y=CPU)) + 
    geom_line(aes(y=CPU)) + 
    geom_smooth(aes(y=fit, ymin=lwr, ymax=upr), stat="identity") + 
    geom_text(aes(label=format(Date, "%b %d"), y=CPU, hjust=hadj), 
      data=app2[app2$extreme,], 
      size=3, angle=90) 

enter image description here

편집

당신은 당신이 축에서 원하는 날짜를 당겨 scale_x_date()breaks 인수에 그것을 전달할 수 있습니다.

extremedates = app2[app2$extreme,"Date"] 

ggplot(app2, aes(x=Date)) + 
    geom_point(aes(y=CPU)) + 
    geom_line(aes(y=CPU)) + 
    geom_smooth(aes(y=fit, ymin=lwr, ymax=upr), stat="identity") + 
    scale_x_date(breaks=extremedates) + 
    opts(axis.text.x = theme_text(angle=90, size=5)) 

enter image description here

+0

그건 아주 좋은 예이고 매우 흥미 롭습니다! 어쩌면 CI 영역 외부의 데이터 포인트에 대해서만 x 축 레이블을 표시하고 싶습니까? – Ben

관련 문제