2016-07-19 5 views
1

을 감안할 때 데이터를 강조 :플롯 (ggplot2)에 걸쳐 일정한 지터와 몇 가지 포인트 같은

dr <- data.frame(
    X = sample(c("yes","no"),10, replace=T), 
    Y = rnorm(1000), 
    highlight = sample(c(1,NA),1000,replace=T,prob=c(5,995)) 
) 

내가 두 개의 플롯을 만들려고합니다. 첫째, geom_jitter()를 사용하여 간단한 하나 overploting을 피하기 위해 :

myseed=101 
set.seed(myseed) 
p <- ggplot(dr, aes(x=X,y=Y,colour=Y,na.rm=T)) + 
    theme_bw() + 
    geom_jitter(alpha=0.7,width=0.5,na.rm=T) + 
    scale_colour_gradient("Y", low="#5edcff", high="#035280") + 
    stat_summary(fun.y = "mean", fun.ymin = "mean", fun.ymax= "mean", size=0.3,width=0.33, geom = "crossbar") 
plot(p) 

Plot 1

그런 다음 두 번째 음모에 내가 5 개 특정 데이터 점을 강조하고 싶습니다. 나는 set.seed을 사용하여 ggplot을 동일한 방식으로 지터로 만든 다음 다른 레이어를 강조 표시 할 점만 추가합니다. 그렇지 않습니다. 빨간색 점이 새로 지터 처리되어 다른 위치에 표시됩니다.

Plot 2

set.seed(myseed) pm <- p + geom_jitter(colour="red",data=filter(dr, highlight == 1),width=0.5,size=2) plot(pm) 

내가 원하는 것은 :
는 (데이터 프레임에서 확인) 5 점은 빨간색으로 강조되는 유일한 차이, 플롯이 정확히 플롯 1처럼 가지고.

어쩌면 문제가 강조 표시된 점을 별도의 플롯에 추가하고 있다고 생각했습니다. "강조 표시"요소를 처음부터 매핑하려고하면 어떻게됩니까?

set.seed(myseed) 
p <- ggplot(dr, aes(x=X,y=Y,colour=Y,fill=highlight)) + 
    theme_bw() + 
    geom_jitter(alpha=0.7,width=0.5) + 
    stat_summary(fun.y = "mean", fun.ymin = "mean", fun.ymax= "mean",  size=0.3,width=0.33, geom = "crossbar") 
plot(p) 
중 하나가 작동하지 않는 것

Plot 3

. 나는 사소한 것을 간과하거나, 잘못된 발로 시작하는 것이지만 작동하도록 할 수는 없습니다.

P. this, thisthis과 같은 이전 질문을 살펴 보았지만 아무도 내 질문에 직접 대답하지 않습니다.

답변

1

를 사용 fill 방법은 올바른 방향이었다. 그러나 fill은 21-25 셰이프에서만 작동하므로 원하는 결과를 볼 수 없었습니다. 모든 포인트

그래프 : 강조 포인트

myseed=101 
set.seed(myseed) 
p <- ggplot(dr, aes(x=X,y=Y,colour=Y)) + 
    theme_bw() + 
    geom_jitter(alpha=0.7,width=0.5, size = 3) + 
    scale_colour_gradient("Y", low="#5edcff", high="#035280") + 
    stat_summary(fun.y = "mean", fun.ymin = "mean", fun.ymax= "mean", size=0.3,width=0.33, geom = "crossbar") 
plot(p) 

enter image description here

그래프 : 다시 stat_summaryaesthetics을 공급

주, 그렇지 않으면 또 다른 요약을 생성하는 것 fill 레이어

enter image description here

myseed=101 
set.seed(myseed) 
p <- ggplot(dr, aes(x=X,y=Y,colour=Y, fill = factor(highlight))) + 
    theme_bw() + 
    geom_jitter(width=0.5, shape = 21, size = 3) + 
    scale_colour_gradient("Y", low="#5edcff", high="#035280") + 
    scale_fill_manual(values=c("red"), guide = FALSE) + 
    stat_summary(aes(x=X,y=Y,colour=Y), inherit.aes = FALSE, 
       fun.y = "mean", fun.ymin = "mean", fun.ymax= "mean", size=0.3,width=0.33, geom = "crossbar") 
plot(p) 

나는 여전히 청소기 솔루션을 수동으로 색상을 코딩하는 것입니다 생각하지만, 나는 그것을 시도하지 않았다. 어쩌면 누군가가 그 해결책을 제공 할 것입니다.

+1

모양 21-25에 대해서는 그 점을 잊어 버렸습니다. ggplot2는 독특한 특징 (ping @hadley)이 충분하지 않은 모양으로 인해 미적인 요소를 매핑 할 수 없다는 간단한 경고가 있었으면 좋겠다. – strangeloop

0

포인트를 개별적으로 플롯하는 것은 어떻습니까? 기본적으로 중요한 작업없이 지터 처리 후에 위치 정보를 복구 할 수 없습니다. 이 불안감을 레이어링의 솔루션에 비해 그래서 그 대신

set.seed(333) 
dr <- data.frame(
    X = sample(c("yes","no"),10, replace=T), 
    Y = rnorm(1000), 
    highlight = sample(c(1,NA),1000,replace=T,prob=c(5,995)) 
) 
ind <- is.na(dr$highlight) 

ggplot(dr, aes(x=X, y=Y, colour=Y)) + 
    geom_jitter(data=dr[ind, ], alpha=0.7, width=0.5) + 
    geom_jitter(data=dr[!ind, ], width=0.5, colour = "red", size=3) + 
    stat_summary(fun.y = "mean", fun.ymin = "mean", fun.ymax= "mean", 
       size=0.3,width=0.33, geom = "crossbar") + 
    theme_bw() 

enter image description here

관련 문제