2016-07-28 7 views
1

ggplot2プロット/オブジェクトを使用してスタックプロットを生成するために、Rmiscパッケージからmultiplot関数を発見しました。私が今しようとしているのは、多重数の多重数を作成することです。残念ながらggplotファンクションとは異なり、multiplotはオブジェクトを生成しないため、multiplotのネストだけで問題を解決することはできません。ggplot2の倍数のマルチプロット

ポイントを明確にするためにデータフレームを作成します。私のデータフレームdfでは、私は3列、period,groupおよびvalueを持っています。 10の期間にわたって3つのグループのそれぞれについて一定の値が記録される。 (注:私はフォーカスが数値ではないので、それはグラフィカルであるsample関数の使用にもかかわらず、以下シード番号を使用しない)

# Create a data frame for illustration purposes 
df <- data.frame(period = rep(1:10, 3), 
       group = rep(LETTERS[1:3], each = 10), 
       value = sample(100, 30, replace = TRUE)) 

を私は、指数関数である、dfに4列を追加しますvalueカラムの変換。

df$exp.value = exp(df$value) 

スタックプロットを作成して、各グループの値を指数関数の対応値と比較することができます。

# Split dataframe by group 
df_split <- split(df, df$group) 

# Plots of values in each group 
plots <- lapply(df_split, function(i){ 
    ggplot(data = i, aes(x = period, y = value)) + geom_line() 
}) 

# Plots of logged values in each group 
plots_exp <- lapply(df_split, function(i){ 
    ggplot(data = i, aes(x = period, y = exp.value)) + geom_line() 
}) 

plotsplots_expggplotオブジェクトを含む3つの要素それぞれの両方のリストです。各リストの最初の要素はグループAに対応し、2番目の要素はグループBに対応し、3番目の要素はグループCに対応します。

各グループの値を指数値と比較するために、multiplot関数を使用できます。

multiplot(plots[[1]], plots_log[[1]], cols = 1) 

value_exp.value_grpA

がどのように私は上記のmultiplotのが含まれますグリッドだけでなく、グループBとCのためのものを作成することができます:グループAでの例を以下に示しますか?あたかもコードに... + facet_grid(. ~ group)が含まれているかのように?

+1

3行2列、6プロットをプロットしてみませんか?また、[cowplot package](https://cran.r-project.org/web/packages/cowplot/vignettes/introduction.html)を参照してください。 – zx8754

答えて

4

我々はcowplotにパッケージを使用することができます。

library(cowplot) 
plot_grid(plots[[1]], plots_exp[[1]], 
      plots[[2]], plots_exp[[2]], 
      plots[[3]], plots_exp[[3]], 
      labels = c("A", "A", "B", "B", "C", "C"), 
      ncol = 1, align = "v") 

enter image description here

私たちすることができますプロットplots_expリストオブジェクトをループPDFに出力します。すべてのページに2つのプロットが含まれます。私たちはグループの多くを持っているとき、これは良いオプションです:

pdf("myPlots.pdf") 
lapply(seq(length(plots)), function(i){ 
    plot_grid(plots[[i]], plots_exp[[i]], ncol = 1, align = "v") 
}) 
dev.off() 

別のオプションは、ggplotのためのデータを準備し、いつものようにを使用することです:

library(dplyr) 
library(tidyr) 
library(ggplot2) 

gather(df, valueType, value, -c(group, period)) %>% 
    mutate(myGroup = paste(group, valueType)) %>% 
    ggplot(aes(period, value)) + 
    geom_line() + 
    facet_grid(myGroup ~ ., scales = "free_y") 

enter image description here