前提

Rで図を描くということ

例えば散布図を描く、というタスクは次のように細分化される。それぞれを要素作業と呼ぶ。

  • 散布図を描く
    • 打点の準備をする
      1. グラフエリアを描く
      2. グラフエリアを分割する
      3. 枠を描く
      4. 軸の目盛りを描く
      5. 軸の目盛りに数字を描く
      6. 軸のラベルを描く
      7. グラフのタイトルを描く
      8. グラフのサブタイトルを描く
    • 打点する
      1. レコード数分だけの点を描く

これらの作業は

  • メモリ空間上の要素作業 (確保するメモリの大きさに寄るが、だいたい一定と考えて良い):ここではaミリ秒とする
  • 線を引く、円を描くなどの、要素作業 (図形の大きさや長さに依存):ここでは線をbミリ秒、点をcミリ秒とする
  • テキストフォントデータを参照してテキストを描く、要素作業 (文字数に依存するが、だいたい一定とみなす):ここではdミリ秒とする

に分かれる。すると、総所要時間はこのように積み上げて計算される。

サブタスク要素時間工数所用時間
グラフエリアを初期化するa1a
グラフエリアを分割するa1a
枠を描くb44b
軸の目盛りを描くb2k2kb
軸の目盛りに数字を描くd2k2kb
軸のラベルを描くc22b
グラフのタイトルを描くd1b
グラフのサブタイトルを描くd1b
レコード数分だけの点を描くcnnc
合計 10+4k+n2a+(4+2k)b+nc+(2+2k)d

この総所要時間は、aからdまでの要素時間の桁がそれほど違わないという前提を置くと、nが多くなればなるほど nc の項が支配的となる。 実際にはこれら以外に、打点数が多ければ多いほど、バッファも多く必要とするので、n^2に比例して総所要時間はこれよりも長くなる。

この前提で、各種のグラフィックスデータの挿入方法を比較してみると、次の通り。

出力方法転送されるデータ再描画と再表示の対応
画面描画Rのグラフィックスデバイス打点しなおし
コピー & ペースト (Windows)描画手順のオブジェクト(Windowsメタファイル)打点しなおし
コピー & ペースト (Mac)描画手順のオブジェクト(TIFF)打点しなおし
EPSファイル描画手順のプログラム(PostScript言語)打点しなおし
JPEGファイル決めた大きさの画像データ(JPEG圧縮)画像のピクセル数分の点
BITMAPファイル決めた大きさの画像データ(圧縮なし)画像のピクセル数分の点
TIFFファイル決めた大きさの画像データ(TIFF)画像のピクセル数分の点

再描画が「打点しなおし」となる手段は、レコード数が大きく、図を構成するグラフィックス要素(打点、折れ線、面など)がレコード数nやn^2に比例する場合には、 張り込んだときの画面の描画、編集中にスクロールして画面の外に消えて、また戻ってきたときの再描画、印刷をするときのプリンタデータへの変換時、プレゼンテーションのときにその図が使われているページを表示するキーを押した瞬間から表示が完了するまで、などあらゆる機会で何度も何度も同じ時間を必要とすることになる。

折れ線グラフの場合

nアイテムの時系列グラフを描く、というタスクは次のように細分化される。それぞれを要素作業と呼ぶ。

  • 散布図を描く
    • 打点の準備をする
      1. グラフエリアを描く
      2. グラフエリアを分割する
      3. 枠を描く
      4. 軸の目盛りを描く
      5. 軸の目盛りに数字を描く
      6. 軸のラベルを描く
      7. グラフのタイトルを描く
      8. グラフのサブタイトルを描く
    • 折れ線を描く
      1. アイテムごとに時点間の線分を繋ぐ操作をレコード数分だけ繰り返す

これらの作業は

  • メモリ空間上の要素作業 (確保するメモリの大きさに寄るが、だいたい一定と考えて良い):ここではaミリ秒とする
  • 線を引く、円を描くなどの、要素作業 (図形の大きさや長さに依存):ここでは線をbミリ秒、点をcミリ秒とする
  • テキストフォントデータを参照してテキストを描く、要素作業 (文字数に依存するが、だいたい一定とみなす):ここではdミリ秒とする

に分かれる。すると、総所要時間はこのように積み上げて計算される。

サブタスク要素時間工数所用時間
グラフエリアを初期化するa1a
グラフエリアを分割するa1a
枠を描くb44b
軸の目盛りを描くb2k2kb
軸の目盛りに数字を描くd2k2kb
軸のラベルを描くc22b
グラフのタイトルを描くd1b
グラフのサブタイトルを描くd1b
k時点間の折れ線グラフを描くbnknkb
合計 10+4k+n2a+(4+2k+nk)b+(2+2k)d

この総所要時間は、aからdまでの要素時間の桁がそれほど違わないという前提を置くと、nが多くなればなるほど、また時点数kが多くなればなるほど nkb の項が支配的となる。 実際にはこれら以外に、打点数が多ければ多いほど、バッファも多く必要とするので、n*kもしくは(n*k)^2に比例して総所要時間はこれよりも長くなる。

r/how_to/export_graphics.txt · 最終更新: 2012/10/29 17:46 by watalu
 
特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC Attribution-Share Alike 4.0 International
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki