15.9 Asymptote でグラフィックを作成する

Asymptote (https://asymptote.sourceforge.io) はベクタグラフィックのための強力な言語です. Asymptote をインストール済みなら (インストールの説明はウェブサイトを見てください) asy エンジンを使い R Markdown に Asymptote のコードを書き実行することもできます. 以下はそのリポジトリ https://github.com/vectorgraphics/asymptote からコピーした例で, 出力を図15.1に示します.

import graph3;
import grid3;
import palette;
settings.prc = false;

currentprojection=orthographic(0.8,1,2);
size(500,400,IgnoreAspect);

real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}

surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Spline);

surface S=planeproject(unitsquare3)*s;
S.colors(palette(s.map(zpart),Rainbow()));
draw(S,nolight);
draw(s,lightgray+opacity(0.7));

grid3(XYZgrid);
Asymptote で作成した3Dグラフィック

図 15.1: Asymptote で作成した3Dグラフィック

PDF 出力に対しては追加の LaTeX パッケージが必要であることに注意してください. そうでないとこのようなエラーが出ることでしょう.

! LaTeX Error: File `ocgbase.sty' not found.

このようなエラーが発生したなら, 欠けている LaTeX パッケージのインストール方法を1.3節で確認してください.

上記の asy チャンクでは, settings.prc = false という設定を使いました. この設定がないと Asymptote は PDF 出力時にインタラクティブな 3D グラフィックを表示してしまいます. しかしインタラクティブなグラフィックは Acrobat Reader でのみ見ることができます. Acrobat Reader を使用しているなら, グラフを操作できます. 例えば図15.1ではマウス操作で3D平面を回転できます.

15.9.1 R でデータを生成し Asymptote に読み込ませる

ここでは, 最初に以下の R コードチャンクのように, R で生成したデータを CSV ファイルに保存します.

x <- seq(0, 5, l = 100)
y <- sin(x)
writeLines(paste(x, y, sep = ","), "sine.csv")

それから Asymptote でこれを読み込み, データに基づいたグラフを描画し図15.2 に示します. 以下が asy コードチャンクです.

import graph;
size(400,300,IgnoreAspect);
settings.prc = false;

// import data from csv file
file in=input("sine.csv").line().csv();
real[][] a=in.dimension(0,0);
a=transpose(a);

// generate a path
path rpath = graph(a[0],a[1]);
path lpath = (1,0)--(5,1);

// find intersection
pair pA=intersectionpoint(rpath,lpath);

// draw all
draw(rpath,red);
draw(lpath,dashed + blue);
dot("$\delta$",pA,NE);
xaxis("$x$",BottomTop,LeftTicks);
yaxis("$y$",LeftRight,RightTicks);
R からデータを渡し Asymptote でグラフを描く

図 15.2: R からデータを渡し Asymptote でグラフを描く