2016-07-01 38 views
2

ggplot2を使ってプロットしたいラスタマップがあります。R凡例とdirectlabelsをggplot2等高線プロットに追加する

そのために私はdirectlabelsパッケージを使用していますし、私が欲しいものを得るに近いですが、私は伝説と同じマップ上のラベル等値線の両方を取得することはできません

次のコードは、私の問題を再現:

install.packages(c('ggplot2', 'directlabels')) 
library('ggplot2') 
library('directlabels') 
df <- expand.grid(x=1:100, y=1:100) 
df$z <- df$x * df$y 

# Plot 1: this plot is fine but without contours  
p <- ggplot(aes(x=x, y=y, z=z), data = df) + 
    geom_raster(data=df, aes(fill=z)) + 
    scale_fill_gradient(limits=range(df$z), high = 'white', low = 'red') 
p 

# Plot 2: This plot adds the isolines but no labels and it also adds a second legend for level which I don't want 
p <- p + geom_contour(aes(colour = ..level..), color='gray30', na.rm=T,  show.legend=T) 
p 

# Plot 3: This plot has the labeled isolines but it removes the z legend that I want to show 
direct.label(p, list("bottom.pieces", colour='black')) 

プロット1 enter image description here

プロット2

enter image description here

プロット3 enter image description here

私はそれの色の側の伝説と上部のラベル等値線で、バックグラウンドで色のラスタを持っていると思います。これを行う方法はありますか?

また、ラベルを下端または上端の代わりに等値線の中央に配置する方法はありますか?事前に

おかげ

パブロ

答えて

4

まず、伝説に関係する問題を修正。

library(ggplot2) 
library(directlabels) 

df <- expand.grid(x=1:100, y=1:100) 
df$z <- df$x * df$y 

p <- ggplot(aes(x=x, y=y, z=z), data = df) + 
    geom_raster(data=df, aes(fill=z), show.legend = TRUE) + 
    scale_fill_gradient(limits=range(df$z), high = 'white', low = 'red') + 
    geom_contour(aes(colour = ..level..)) + 
    scale_colour_gradient(guide = 'none') 

p1 = direct.label(p, list("bottom.pieces", colour='black')) 
p1 

enter image description here

ラベルを配置するためにあまりにも多くのオプションがありません。 1つの可能性はangled.boxesですが、fillの色があまり良くないかもしれません。 。hereからのコードを使用して(透明にfill色を変更する

p3 = direct.label(p, list("far.from.others.borders", "calc.boxes", "enlarge.box", 
     box.color = NA, fill = "transparent", "draw.rects")) 
p3 

enter image description here

輪郭線オフラベルを移動する

p2 = direct.label(p, list("angled.boxes")) 
p2 

enter image description here

p4 = direct.label(p, list("far.from.others.borders", "calc.boxes", "enlarge.box", 
     hjust = 1, vjust = 1, box.color = NA, fill = "transparent", "draw.rects")) 
p4 

enter image description here

+0

これは私が必要としていたものです。どうもありがとうございます。 – Ludecan

関連する問題