2016-09-24 4 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

を、上位2つの輪郭のための色とラベルは後方です。どのようにこれを修正するための任意の提案?

Original @jlhoward solution

PS私はイメージ作品へのリンクを願っています。それはあなたが、あなたは自動的にあなたがcutで使用される切断の順序によって順序付けfactorを取得cutを使用して区切りを作成すると、私はポスト:(

答えて

3

に画像を含めることができます前に、私はより多くの評判ポイントを必要とするように見えます。しかし、 brksgsubに変更すると、factorから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

関連する問題