2016-04-08 22 views
1

私はいくつかのデータとこのデータのマージンプロットを含むラスタマップをプロットしようとしています。 種類がlevelplot()rasterVisのように機能しているか、線ではなく色で(プロット内の色を反映して)より優れています。私がしようとしていることを見て、以下で明らかになります。 (密度ラインと)rasterVis例:ggplot2でgeom_raster()の余白プロットをプロットする

http://i.stack.imgur.com/QiaUu.png

しかし、私はggplot2を使用します。 data used in this example(8KB)をダウンロードしてください。

私はgrid.arrange()を使用しようとしました:

library(ggplot2) 
library(raster) 
library(maps) 
library(grid) 
library(scales) #for muted() 
library(gridExtra) 

load("example.Rsave") #load data 

#prepare data for the margin plot 
var=tp_rlim; min=0; max=1; mid=0.5 
varname <- colnames(var)[3] 
zonal <- aggregate(var[,3], list(var$Lat), mean) 
colnames(zonal) <- c("Lat", varname) 

#plot the margin plot 
ggzonal <- ggplot(zonal, aes(x="", y=Lat, fill=tp))+ 
      geom_raster() + 
      theme(legend.position="none", 
        axis.title.x = element_blank(), 
        axis.title.y = element_blank(), 
        axis.ticks = element_blank(), 
        axis.text.x = element_blank(), 
        axis.text.y = element_blank() 
        ) + 
      scale_fill_gradient2(limits=c(min, max), space="Lab", midpoint=mid) 

#plot main plot 
    gg <- ggplot(var, aes_string(x="Lon", y="Lat", fill=varname)) + 
      geom_raster() + 
      coord_quickmap(xlim = range(var$Lon), ylim = range(var$Lat)) + 
      scale_fill_gradient2(limits=c(min, max), space="Lab", midpoint=mid) + 
      theme(legend.position="bottom", 
        legend.key.width = unit(1.5, "cm"), 
        legend.key.height = unit(0.3, "cm"), 
        legend.title=element_blank() 
       ) + 
      borders(region=unique(na.omit(map.where("world", var$Lon, var$Lat))), colour="black") 

    grid.arrange(gg, ggzonal, ncol=2, widths=c(5, 1)) 

しかし、結果は満足できるものではない: enter image description here

私もggExtra::ggMarginalを使用しようとしましたが、している:

ggExtra::ggMarginal(gg) 

enter image description here

または:

ggExtra::ggMarginal(gg, type="histogram") 

enter image description here

私はこれをどのように行うことができますか?

library(cowplot) 

grobs <- ggplotGrob(gg + theme(legend.position="bottom"))$grobs 
legend_b <- grobs[[which(sapply(grobs, function(x) x$name) == "guide-box")]] 

prow <- plot_grid(gg + theme(legend.position="none"), ggzonal, align = 'h', rel_widths = c(5, 1)) 

plot_grid(prow, legend_b, ncol = 1, rel_heights = c(1, .2)) 
ggsave('stack.png', w = 5, h = 5) 

結果:

enter image description here

答えて

3

これはうまくいくかもしれない、

# fix the ylim of annotation plot 
gg2 = ggzonal + coord_cartesian(ylim = range(var$Lat)) 
# devtools::install_github("baptiste/egg") 
library(egg) 
ggarrange(gg, gg2, widths = c(10,1)) 

+0

しかし、右の列がやや滑らかに短いことがわかりますか?私は完璧主義者ですが、残念ながら、それをすることはできません:( – AF7

+0

パネルに正しいサイズがあるので、そのプロットのデータに何か問題があると思います。 – baptiste

+1

実際に、RHSプロットは同じy制限他の1つとして – baptiste

2

素晴らしいcowplotパッケージを使用して、命令がhere見つけ、私たちは、次の操作を行うことができますenter image description here

+0

これは素晴らしいことです、ありがとう! – AF7

+0

質問があります。あなたの答えで、 'rel_widths = c(5、1)'の代わりに 'rel_widths = c(10、1)'を設定すると、正しいプロットが少し圧縮されます。何故ですか?今のところそれは広すぎます。編集:大丈夫、私はまた、rel_heights分別する必要がありますが、それは私には意味をなさない。 – AF7

+0

小さなナックル:このアプローチを使用すると、明らかにcoord_equal()に頼ってcoord_quickmap()をキャンセルします。これを修正するために何かできますか? – AF7

関連する問題