2014-04-24 2 views
4

다각형이있는 stat_contour을 사용하면 데이터가 없기 때문에 일부 영역을 채우지 않아야합니다. 누구든지 그것을 피하는 방법을 알고 있습니까? 또한, 축과 플롯 영역 사이에 공간이 있습니다. 어떻게 제거할까요?! 여기 r stat_contour 다각형으로 채우기가 올바르지 않음

는 플로팅 코드 :

plot_contour <- function (da, native) { 
    h2d<-hist2d(da$germ_div,da[[native]],nbins=40,show=F) 
    h2d$counts<-h2d$counts+1 
    counts<-log(h2d$counts, base=10) 
    rownames(counts)<-h2d$x 
    colnames(counts)<-h2d$y 
    counts<-melt(counts) 
    names(counts)<-c('x','y','z') 
    ggplot(counts,aes(x,y))+ 

    stat_contour(expand=c(0,0),aes(z=z,fill=..level..),geom='polygon')+ 
    stat_contour(data=counts[counts$x<=75,],aes(z=z,fill=..level..),bins=50,geom='polygon')+ 
    scale_fill_gradientn(expand=c(0,0),colours=rainbow(1000), 
        limits=c(log(2,base=10),4),na.value='white',guide=F)+ 
    geom_contour(aes(z=z,colour=..level..),size=1.5)+ 
    scale_color_gradientn(colours=rainbow(30),limits=c(log(2,base=10),4),na.value='white', 
          guide=F) + theme_bw()+ 
    scale_x_continuous(expand=c(0,0),limits=c(0,50))+ 
scale_y_continuous(expand=c(0,0),limits=c(40,100))+ 
    labs(x=NULL, y=NULL, title=NULL)+ 
     theme(axis.text.x = element_text(family='Times', colour="black", size=20, angle=NULL, 
      hjust=NULL,vjust=NULL,face="plain"), 
      axis.text.y = element_text(family='Times', colour="black", size=20,angle=NULL, 
      hjust=NULL,vjust=NULL,face="plain") 
     ) 

     } 

da<-read.table('test.txt',header=T) 
i<-'test' 

plot_contour(da,i) 

답변

4

이 그렇게 대답으로 게시, 코멘트에 맞지 않았다

stat_contour이 잘 닫히지 않은 폴리곤을 처리하지 않습니다. 또한 빈을 수동으로 설정할 때 실제 윤곽 계산이 위변조 될 수있는 정밀도 문제가 있습니다 (윤곽선이 플롯 데이터와 동일하지만 정밀도 문제로 인해 동일하게 인식되지 않는 경우 발생 함) .

첫 번째 문제는 모든 방향으로 눈금을 1 씩 확장 한 다음 신경 써야하는 것보다 낮은 임의의 값을 임의로 낮은 값으로 설정하여 해결할 수 있습니다. 이렇게하면 윤곽선 계산이 강제로 플롯의 모서리에서 열려있는 모든 다각형을 닫습니다. 그런 다음 coord_cartesian(xlim=c(...))을 사용하여 축을 그래프와 동일 높이로 설정할 수 있습니다.

두 번째 문제는 ggplot 코드를 수정하지 않고 해결할 좋은 방법을 알지 못합니다. 이 문제의 영향을받지 않을 수도 있습니다.

0

@BrodieG 답변은 정확하지만 일부 코드가 없으면 약간 어렵습니다.

적절한 X에 다음 줄을 추가하면, y 값은 (이는 추측이다)하게 명확 일 :

xlim(-10, 60)+ 
    ylim(30, 120)+ 
    coord_cartesian(xlim=c(0, 50),ylim=c(40, 100))