2016-09-24 3 views
2

여기서는 @jlhoward가 제공 한 솔루션을 사용하여 등고선 간격으로 이산 적으로 정의 된 ggplot의 등고선 플롯을 작성하려고합니다. 그러나 제 데이터 세트는 0을 넘어서고이 값은 0 이하의 값의 색상과 레이블이 순서가 잘못되어 플롯됩니다. 당신이 볼 수 있듯이 this plotggplot과 0이 교차하는 불연속으로 채워진 등고선을 그리는 방법은 무엇입니까?

, 색상과 상단이 윤곽의 레이블 거꾸로 있습니다

x<-seq(-11,11,.03)     # note finer grid 
y<-seq(-11,11,.03) 
xyz.func<-function(x,y) {-10.4+6.53*x+6.53*y-0.167*x^2-0.167*y^2+0.0500*x*y} 
gg <- expand.grid(x=x,y=y) 
gg$z <- with(gg,xyz.func(x,y))  # need long format for ggplot 
library(ggplot2) 
library(RColorBrewer)    #for brewer.pal() 
brks <- cut(gg$z,breaks=seq(-50,100,len=6)) 
brks <- gsub(","," - ",brks,fixed=TRUE) 
gg$brks <- gsub("\\(|\\]","",brks) # reformat guide labels 
ggplot(gg,aes(x,y)) + 
    geom_raster(aes(fill=brks))+ 
    scale_fill_manual("Z",values=brewer.pal(6,"YlOrRd"))+ 
    scale_x_continuous(expand=c(0,0))+ 
    scale_y_continuous(expand=c(0,0))+ 
    coord_fixed() 

이 플롯을 생성합니다. 이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까?

Original @jlhoward solution

PS 나는 영상 작품에 대한 링크를 바랍니다. 그것은 당신이, 당신은 자동으로 당신이 cut에 사용되는 휴식의 순서로 주문한 factor를 얻을 cut를 사용하여 나누기를 만들 때 내가 게시물 :(

답변

3

의 이미지를 포함하기 전에 좀 더 명성 포인트를 필요 것 같습니다. 그러나 brksgsub으로 변경하면 factor에서 알파벳 순서로 된 에서 factor 함수 호출로 순서를 재설정 할 수 있지만 원래 호출 내에서 cut으로 원하는 레이블을 만드는 것이 더 쉽습니다.

breaks = seq(-50,100,len=6) 

gg$brks = cut(gg$z, breaks=breaks, 
       labels=paste0(breaks[-length(breaks)]," - ", breaks[-1])) 

이제 cut으로 생성 된 기본 레이블 대신 원하는 레이블을 정확하게 사용할 수 있습니다.

원래 방법과 위의 방법으로 str(gg)을 비교하면 brks이 전자의 문자이고 후자의 요소라는 것을 알 수 있습니다.

결과 플롯입니다. 나는 또한 플롯에서 색의 순서와 일치하도록 전설의 명령을 뒤집을 자유를 취했다. 이렇게하면 색상과 값 범위 사이의 관계를 더 쉽게 볼 수 있습니다.

ggplot(gg,aes(x,y)) + 
    geom_raster(aes(fill=brks))+ 
    scale_fill_manual("Z",values=brewer.pal(6,"YlOrRd"))+ 
    scale_x_continuous(expand=c(0,0))+ 
    scale_y_continuous(expand=c(0,0))+ 
    coord_fixed() + 
    guides(fill=guide_legend(reverse=TRUE)) 

enter image description here