2016-09-24 105 views
2

我正在嘗試使用@jlhoward提供的解決方案,在離散定義的輪廓間隔中在ggplot中繪製輪廓圖。但是,我的數據集過零,這似乎導致顏色和零值以下的標籤被亂序繪製。如何繪製用ggplot過零的離散填充輪廓?

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() 

這會產生這樣的情節: this plot

正如你所看到的顏色和上面兩個輪廓的標籤是倒退。對於如何解決這個問題,有任何的建議嗎?

Original @jlhoward solution

PS我希望鏈接到的圖像作品。它看起來像我需要更多的聲譽分,之前當您使用cut,你會自動得到一個factor,或你在cut使用中斷的順序進行排序的休息,我可以包括在後:(

回答

3

圖像。但然後更改brksgsub的呼叫轉換brksfactorcharacter,它按字母順序排列。您可以通過調用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