ユーザ用ツール

サイト用ツール


メモ:ggplot

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
メモ:ggplot [2020/10/28 13:53] Wiki Editorメモ:ggplot [2022/05/18 10:33] (現在) Wiki Editor
行 52: 行 52:
  
 出力先をemf関数で作成してprint関数で出力する。WidthとHeightでキャンバスの解像度を指定できる。解像度を高くすると、文字のフォントが小さくなるため、ggplot側で大きくしてやる必要がある。ベクタ画像なのでキャンバスの解像度と品質はあまり関係ないので、出力する文字のサイズを見ながら解像度を調整すればよい。 出力先をemf関数で作成してprint関数で出力する。WidthとHeightでキャンバスの解像度を指定できる。解像度を高くすると、文字のフォントが小さくなるため、ggplot側で大きくしてやる必要がある。ベクタ画像なのでキャンバスの解像度と品質はあまり関係ないので、出力する文字のサイズを見ながら解像度を調整すればよい。
 +
 +===== ggpairs 散布図行列を描画するパッケージ =====
 +複数の変数間の関係を一度に図示するために、散布図行列をggplotで作成するパッケージ。基本的なところは関数にデータフレームを渡せばよいが、少し内容をカスタマイズするためには、各マトリックスを描画するオリジナルなggplot関数を作成するとよい。
 +
 +  library(GGally)
 +  ggpairs(DAT)
 +
 +基本的には散布図行列を作成する列が入ったデータフレームを渡すだけでよい。
 +
 +散布図行列の左下、対角線、右上に何を描画するのかは、それぞれlower, diag, upperのパラメータで設定する。それぞれのパラメータはListを取り、リストに連続変数同士(continuos)、連続×カテゴリカル変数同士(combo)、カテゴリカル変数同士(discrete)の場合に、何を描画するのかを指定する。
 +
 +  ggpairs(
 +     DAT
 +    ,lower = list(continuous = "point", combo = "box_no_facet")
 +    ,upper = list(continuous = "cor", discrete = "count")
 +  )
 +
 +描画できるプロットは、「ggally_xyz」関数の「xyz」に対応している。点の色などを変更したい場合は、関数にパラメータを渡すことができる。その場合は、wrap関数を用いる。利用できるパラメータは、各関数のヘルプを参照。
 +
 +  ggpairs(
 +     DAT
 +    ,lower = list(continuous = wrap("points", color="red"), combo = "box_no_facet")
 +    ,upper = list(continuous = "cor", discrete = "count")
 +  )
 +  # ggally_points関数はgeom_point関数の各種パラメータを取れるので、点の色を赤にする。
 +
 +基本的なものは用意されているが、細かくカスタマイズしようとすると、パラメータが用意されていない場合がある。例えば、ggally_smoothは、散布図に回帰直線を描画するものであるが、colorオプションでは散布図の点の色は変更できるが、回帰直線の色は指定できない(もしかして方法があるのか?)。また、linetype等も指定しても反映されないようだ。その場合は、ggplotで描画する関数を自作して渡してやればよい。
 +
 +  # まずggplotで目的のプロットを出力する関数を作成
 +  # data, mappingの他に、各関数に与える引数を持ったリストを受け取る引数(ここではpts, smt)を用意しておく
 +  # pts, smtは、do.call関数で各ggplot関数に引き渡す。この場合、必要なパラメータを全て設定しておく必要がある。
 +  # do.call関数は、第一引数の関数に第2引数のリストの中身を展開して関数の引数に与えて実行する。
 +  mygg <- function(data, mapping, pts=list(), smt=list(), ...){
 +    ggplot(data=data, mapping=mapping, ...) +
 +      do.call(geom_point, pts) +
 +      do.call(geom_smooth, smt)
 +    }
 +  
 +  # ggally_関数名の代わりに作成した関数を渡す。
 +  # その際に、各ggplot関数に渡すパラメータを格納したListを同時に渡す
 +  # スタイルが固定なら、あらかじめ自作関数側で指定してもよいだろう
 +  ggpairs(
 +     title="各回の学習時間同士の関係"
 +    ,lower = list(continuous=wrap(
 +                              mygg,
 +                              pts=list(shape=1, color="red"),
 +                              smt=list(size=0.5, color="blue", method="lm", se=FALSE)
 +                              ))
 +  )
 + 
 +ggpairsの他のパラメータはまだ調べていない。とりあえず、描画するプロットをカスタマイズする方法のみメモ。
 +
 +
 +
 +===== facetのラベルを折り返す =====
 +
 +facetを利用するとき、ラベルが長いとはみ出してしまう。任意の文字数で折り返したい場合、labellerオプションを指定する。
 +
 +labellerには標準で使えるいくつかの関数が用意されており、label_wrap_genが折り返しに使えそうだが英語を念頭に作られており、文字数を指定しても単語の区切りごとにしか改行されない。日本語の場合、単語の区切りに空白などないのでこの関数では折り返すことができない。単純に文字数で折り返す関数を用意する必要がある。
 +
 +色々やってみた結果、インラインで簡単な関数を定義するのが手軽だ。
 +  
 +  ....
 +  .... 
 +  facet_wrap(vars(var_label), ncol=2, labeller = labeller(.default = function(x) str_wrap(x, 10)))
 +
 +labeller()関数の.defaultオプションに関数を与えてやれば、文字列がその関数で処理されるようになる。そこで、str_wrapで10文字(10バイト?)で改行する関数をインラインで書くと、facetのラベルが10文字ごとに改行される。
  
  
メモ/ggplot.1603860810.txt.bz2 · 最終更新: 2020/10/28 13:53 by Wiki Editor

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki