2013-01-21 3 views
1

ggplot을 사용하여 변수와 속성을 그립니다. enter image description hereggplot의 인자 중 하나를 무시 R

내가 플롯에서 '정상'요소를 생략 단지 '특이점'을 제시하고자하고 할 것 : 코드의

require(ggplot2) 
require(reshape2) 
df <- data.frame(HMn25_30$avg,HMn25_30$h) 
df[3] = c("Normal", 
       "Normal", 
       "Normal", 
       "Normal", 
       "Normal", 
       "Normal", 
       "Normal", 
       "Normal", 
       "Normal", 
       "Normal", 
       "Outlier", 
       "Outlier", 
       "Outlier", 
       "Outlier", 
       "Outlier", 
       "Outlier", 
       "Normal", 
       "Outlier", 
       "Outlier", 
       "Normal", 
       "Normal", 
       "Outlier", 
       "Outlier", 
       "Normal", 
       "Normal" 
) 
names(df)[1] <- 'Node 25' 
names(df)[3] <-'Results' 
df.m <- melt(df, names(df)[2:3], names(df)[1]) 
df.m$Results <- factor(df.m$Results) 
df.m$HMn25_30.h <- strptime(as.character(df.m$HMn25_30.h), format = "%Y-%m-%d %H:%M:%S") 
p <- ggplot(df.m, aes(x = HMn25_30.h, y = value, group = variable, color = variable)) 
p <- p + scale_shape_manual(values=c(20,22)) 
p <- p + geom_point(aes(shape = Results), cex=9, color= "blue3") 
p <- p + theme(axis.text.x = element_text(angle = 90, hjust = 1, size=13,color="darkred")) 
p <- p + scale_color_manual(values=c("Red")) 
p <- p + ylim(-1,8) 
p <- p + theme_bw() 
p <- p + xlab('Date and Time') 
p <- p + ylab('Temprature') 
p <- p + ggtitle("Temporal Outliers of Node 25 ") + theme(plot.title = element_text(lineheight=3, face="bold", color="black", size=29)) 
p <- p + theme(legend.text = element_text(colour="darkred", size = 25)) 
p <- p + theme(legend.title = element_text(colour="brown", size=25)) 
p <- p + theme(axis.title.x = element_text(face="bold", colour="darkred", size=16),axis.text.x = element_text(angle=90, vjust=0.5, size=26)) 
p <- p + theme(axis.title.x = element_text(face="bold", colour="darkred", size=14),axis.text.y = element_text(angle=00, vjust=0.5, size=20)) 
p <- p + labs(x = "Date-Time [UTC] \ 2007-09-30 ", y = "Temprature ") 
p <- p + theme(axis.title.y = element_text(size = rel(2.1), angle = 90)) 
p <- p + theme(axis.title.x = element_text(size = rel(2.1), angle = 00)) 
p <- p + geom_line(size=1.9) 
p 

결과 : 나는 다음과 같은 코드를 사용하여 ggplot 및 계수를 사용하고 있습니다 .

샘플 데이터 :

 Node 25   HMn25_30.h Results 
1 0.26000000 2007-09-29 23:00:00 Normal 
2 0.01500000 2007-09-30 00:00:00 Normal 
3 -0.35333333 2007-09-30 01:00:00 Normal 
4 -0.42333333 2007-09-30 02:00:00 Normal 
5 -0.73333333 2007-09-30 03:00:00 Normal 
6 -0.65000000 2007-09-30 04:00:00 Normal 
7 -0.40000000 2007-09-30 05:00:00 Normal 
8 -0.09166667 2007-09-30 06:00:00 Normal 
9 0.19000000 2007-09-30 07:00:00 Normal 
10 0.63500000 2007-09-30 08:00:00 Normal 
11 1.05500000 2007-09-30 09:00:00 Outlier 
12 1.26833333 2007-09-30 10:00:00 Outlier 
13 2.28166667 2007-09-30 11:00:00 Outlier 
14 4.17000000 2007-09-30 12:00:00 Outlier 
15 6.34000000 2007-09-30 13:00:00 Outlier 
16 6.56666667 2007-09-30 14:00:00 Outlier 
17 6.74666667 2007-09-30 15:00:00 Normal 
18 5.82833333 2007-09-30 16:00:00 Outlier 
19 6.36500000 2007-09-30 17:00:00 Outlier 
20 4.60333333 2007-09-30 18:00:00 Normal 
21 4.98000000 2007-09-30 19:00:00 Normal 
22 2.65666667 2007-09-30 20:00:00 Outlier 
23 4.90833333 2007-09-30 21:00:00 Outlier 
24 5.05000000 2007-09-30 22:00:00 Normal 
25 4.56500000 2007-09-30 23:00:00 Normal 

답변

1

당신은 당신의 데이터가 포함 재현 코드를 제공하지 않은,하지만 당신은 간단한 부분 집합으로이를 달성 할 수있는 것으로 보인다. 이것에

p <- ggplot(df.m, aes(x = HMn25_30.h, y = value, group = variable, 
             color = variable)) 

을 :이 줄을 변경해보십시오 나는 당신의 데이터 프레임의 구조를 이해한다면

p <- ggplot(df.m[df.m$Result == "Outlier", ], aes(x = HMn25_30.h, y = value, 
            group = variable, color = variable)) 

제대로 그에만 Results 열 값 Outlier을 갖고있는 행을 플롯합니다.

+0

코드의 문제는 그것이 특이하지 않은 장소를 무시한다는 것입니다. 전체 라인을 가지고 싶지만 Normal의 심볼을 무시하십시오 –

+0

그래서 'Outlier' ** 데이터 **를 라인으로 나타내 길 원하지만 그 라인의 심볼에 대한 심볼을 원하지 않습니까? – SlowLearner

+0

아니요, 이상 값 데이터와 일반 데이터를 모두 선으로 그려야합니다. 기호를 통해 특이점 만 표시. –

3

사용 geom_point 명령에 대한 Results == "Outlier" 데이터 프레임의 부분 집합 :

p <- p + geom_point(data = df.m[df.m$Results == "Outlier",], 
        cex=9, color= "blue3", shape = 22) 

는 그런 다음, scale_shape_manual 명령에 대한 필요가 없습니다.

enter image description here

전체 코드는 :

library(ggplot2) 
p <- ggplot(df.m, 
      aes(x = HMn25_30.h, y = value, group = variable, color = variable)) 
#p <- p + scale_shape_manual(values=c(20,22))     # command removed 
p <- p + geom_point(data = df.m[df.m$Results == "Outlier",], 
        cex=9, color= "blue3", shape = 22)  # command modified 
p <- p + theme(axis.text.x = element_text(angle = 90, hjust = 1, size=13, 
       color="darkred")) 
p <- p + scale_color_manual(values=c("Red")) 
p <- p + ylim(-1,8) 
p <- p + theme_bw() 
p <- p + xlab('Date and Time') 
p <- p + ylab('Temprature') 
p <- p + ggtitle("Temporal Outliers of Node 25 ") + 
     theme(plot.title = element_text(lineheight=3, face="bold", 
       color="black", size=29)) 
p <- p + theme(legend.text = element_text(colour="darkred", size = 25)) 
p <- p + theme(legend.title = element_text(colour="brown", size=25)) 
p <- p + theme(axis.title.x = element_text(face="bold",colour="darkred" size=16), 
       axis.text.x = element_text(angle=90, vjust=0.5, size=26)) 
p <- p + theme(axis.title.x = element_text(face="bold",colour="darkred",size=14), 
       axis.text.y = element_text(angle=00, vjust=0.5, size=20)) 
p <- p + labs(x = "Date-Time [UTC] \ 2007-09-30 ", y = "Temprature ") 
p <- p + theme(axis.title.y = element_text(size = rel(2.1), angle = 90)) 
p <- p + theme(axis.title.x = element_text(size = rel(2.1), angle = 00)) 
p <- p + geom_line(size=1.9) 
p 
4

당신은 geom_point에 전화로 subset 인수를 추가하고 하위 집합을 정의 할 plyr에게 .() 기능을 사용할 수 있습니다.

예를 들어

p + geom_point(aes(x = HMn25_30.h, y = value, colour = variable), subset = .(Results == 'Outlier')) 

좋은 작은 재현 예를

DF <- data.frame(a = letters[1:4], b = 1:10) 

library(plyr) # must be explicitly loaded 


ggplot(DF, aes(x = b, y = b)) + 
    geom_point(subset = .(a == 'a'), colour = 'blue') + 
    geom_point(subset = .(a == 'c'), colour = 'green') + 
    geom_line() 

enter image description here

+0

고마워요.이게 정확히 제가 찾던 것입니다. :) –