pyotr
@pyotr

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Rで、ggplot()で作成したグラフをリストに入れていきたい

Q&A

Closed

Rで、lapplyを用いてggplot()で作成したグラフをリストに入れたい

目的:ggplot()を用いて複数のグラフを描画した後、grid.arrangeを用いて1枚の図表として保存したい。書きたいグラフはどれも同じ構造で、同じデータフレームに格納できているのでfacet_wrapでも同じようなことはできるが、グラフによって回帰線を書く、書かないを変えたい。そのため、このような方法を取ろうとした。

考えたこと:
lapplyとfunction()を使えば、グラフを複数作る所までできると思った。
後は、
list[[1]]+geom_smooth()
のようにすれば、任意のグラフにだけ回帰線を引けると思った。

書いたコード


list=list(A,B,C) #A,B,Cはデータフレームとする
plotlist=NULL

lapply(list, function(a){
  b=ggplot(data=a, aes())+
    geom_line()+
  plotlist=list(plotlist,b)
}
       )

こうすればA,B,Cに対応するグラフが格納されたリストができるのでは?と思いましたが、plotlistの中身はNULLになってしまいます。
Rは初心者ですので、おそらく根本的に誤っている部分があると思います。
どのような理由でこれではいけないのか、またどのようにすれば試みていることができるかを教えていただけると嬉しいです。

0

2Answer

ここ記事は多いでずがR愛好家が少ないですよ。ruby,python愛好家ですみません。

grid.arrangeを用いて1枚の図表として保存したい

保存するフォーマットは具体的にイメージしてますか?(リストのアイテムに格納するフォーマット、例えばsvg)

下記のURLを参考に、一度、ローカルディスクにsvg形式で出力してください。

次に io.bytes R で検索し、変数をあたかもローカルファイル
として、用いるレシピを入手してください。

R言語には tempfile() レベルしか無いのでしょうか?残念。

ローカルファイル、tempfileから読み込み、リストに保存してください

0Like

Comments

  1. @pyotr

    Questioner

    コメントありがとうございます。貼ってくださった記事から勉強してみます。

この記事はどうですか?

install.packages("patchwork")
library(ggplot2)
library(dplyr)
library(patchwork)

A <- filter(iris, Species == "setosa")
B <- filter(iris, Species == "versicolor")
C <- filter(iris, Species == "virginica")

datalist <- list(A, B, C)

plotlist <- lapply(datalist, function(a) {
    ggplot(a, aes(x = Sepal.Length, y = Sepal.Width)) +
      geom_point() +
      labs(title = a$Species)
  }
)

plotlist[[2]] <- plotlist[[2]] +
                    geom_smooth(method = "lm")

wrap_plots(plotlist)

iris.png

0Like

Comments

  1. @pyotr

    Questioner

    どちらの記事も大変参考になりました!
    ありがとうございます。

Your answer might help someone💌