2017-06-15 4 views
1

viewportを使用して垂直方向の2つの図を結合したいと思います。図はggplotとfacet_grid()で作成されます。 発生する問題は、カテゴリ変数の凡例の長さが異なることです。 凡例にはより多くの場所が必要となるため、これは異なる幅のプロットになります。私はプロットの幅が同じであることを望みます。ビューポートを使用してビルドされた垂直結合プロットを整列する方法

どうすればこの問題を解決できますか?ここで

が揃っていないプロットと図の例である:ここで

enter image description here

は図を生成するためのコードです:

# dataframe 
x <- rep(1:10,2) 
y <- x + rep(c(0,2),each=10) 
sex <- rep(c("f","m"), each=10) 
sex2 <- rep(c("fffffffff","mmmmmmmmm"), each=10) 
df0 <- data.frame(x = x, y = y, sex = sex, sex2 = sex2) 

# libraries 
library("grid") 
library("gridExtra") 
library("ggplot2") 

# Viewport 
Layout <- grid.layout(nrow = 2, ncol = 1, heights = unit(c(1,1), c("null","null"))) 
vplayout <- function(x,y) { 
     viewport(layout.pos.row=x, layout.pos.col=y) 
} 

# plot object 
p1 <- ggplot(df0,aes(x = x, y = y,linetype=sex)) + 
     geom_line() 

p2 <- ggplot(df0,aes(x = x, y = y,linetype=sex2)) + 
     geom_line()   

# figures 
tiff("test0.tiff", width=5, height=10, units="cm", res=300, compression = 'lzw') 
grid.newpage() 
pushViewport(viewport(layout= Layout)) 
print(p1 + theme_bw(base_size=5), vp = vplayout(1,1)) 
print(p2 + theme_bw(base_size=5), vp = vplayout(2,1)) 
dev.off() 
+1

答えの一部を見てください(受け入れられたものではありません):https://stackoverflow.com/questions/26159495/align-multiple-ggplot-graphs-with-and-without-legends – MrFlick

+1

'cowplot :: plot_grid (p1、p2 align = "v"、nrow = 2、rel_heights = c(1/2、1/2)) ' – Masoud

+0

@Masoud:この関数は私の問題を解決しました。私はあなたの解決策を受け入れることができるようにあなたの答えを答えてください。 – giordano

答えて

1

あなたはcowplot::plot_grid

# figures 
library(cowplot) 
tiff("test0.tiff", width=5, height=10, units="cm", res=300, compression = 'lzw') 
grid.newpage() 
plot_grid(p1, p2, align = "v", nrow = 2, rel_heights = c(1/2, 1/2)) 
dev.off() 
を使用することができます

注:df0の設定方法がわからないので、エクスポートされたプロットを表示することはできません。

+0

私はdf0を 'df0 < - data.frame(x = x、y = y、sex = sex、sex2 = sex2)'という質問で構築するために欠けている部分を追加しました。コピー貼り付けプロセス中に失われました。手伝ってくれてありがとう。 – giordano

関連する問題