Illustrator CS/CS2/CS3/CS4編 対数ガイドを作成する

対数値をプロットしたい場合などに対数ガイドがあると便利です。以下のスクリプトは片対数グラフのガイドを生成します。


stepY = 0.1;
maxY = 8; // 10の8乗までを描く
lenX = 600; // 横のガイドの長さ
baseY = 100; // 1ブロックの縦幅(倍率)
docObj = activeDocument;
for (i=0; i<maxY; i++)
{
for (n=0; n<1; n+=stepY)
{
y = log10(n) * baseY + baseY*i;
pObj = docObj.pathItems.add();
pObj.setEntirePath([[0,baseY+y],[lenX,baseY+y]]);
pObj.guides = true;
}
}
function log10(x) { return Math.LOG10E * Math.log(x); }
グラフの細かさは先頭行の

stepY = 0.1;

の数値で変更できます。0.01など小さい値にすると、より細かいガイドが生成されます。
10のn乗まで描くかは2行目の

maxY = 8; // 10の8乗までを描く

の8の値を変更してください。1ブロックの縦幅は

baseY = 100; // 1ブロックの縦幅(倍率)

の100を変更してください。単位はピクセルになっています。
片対数のガイドではなく両対数のガイドの場合は以下のスクリプトを使ってください。

step = 0.1;
maxX = 6; // 10の6乗までを描く(横)
maxY = 8; // 10の8乗までを描く(縦)
lenX = 600; // 横のガイドの長さ
lenY = 800; // 縦のガイドの長さ
base = 100; // 1ブロックの縦幅(倍率)
docObj = activeDocument;
for (i=0; i<maxY; i++)
{
for (n=0; n<1; n+=step)
{
y = log10(n) * base + base*i;
pObj = docObj.pathItems.add();
pObj.setEntirePath([[0,base+y],[lenX,base+y]]);
pObj.guides = true;
}
}
for (i=0; i<maxX; i++)
{
for (n=0; n<1; n+=step)
{
x = log10(n) * base + base*i;
pObj = docObj.pathItems.add();
pObj.setEntirePath([[base+x,0],[base+x,lenY]]);
pObj.guides = true;
}
}
function log10(x) { return Math.LOG10E * Math.log(x); }
設定変更できる値は最初のスクリプトとほぼ同じです。
ガイドで生成するのではなく、単なる線としたい場合にはパスの線の設定や色指定が必要になるので以下のスクリプトを使用してください。

step = 0.1;
maxX = 6; // 10の6乗までを描く(横)
maxY = 8; // 10の8乗までを描く(縦)
lenX = 600; // 横のガイドの長さ
lenY = 800; // 縦のガイドの長さ
base = 100; // 1ブロックの縦幅(倍率)
docObj = activeDocument;
for (i=0; i<maxY; i++)
{
for (n=0; n<1; n+=step)
{
y = log10(n) * base + base*i;
pObj = docObj.pathItems.add();
pObj.setEntirePath([[0,base+y],[lenX,base+y]]);
pObj.filled = false; // 塗りなし
pObj.stroked = true; // 線あり
pObj.strokeWidth = 0.5; // 線幅0.5ポイント
pObj.fillColor = setColor(0,0,0); // 塗りの色を指定(黒色)
pObj.strokeColor = setColor(0,0,0); // 線の色を指定(黒色)
}
}
for (i=0; i<maxX; i++)
{
for (n=0; n<1; n+=step)
{
x = log10(n) * base + base*i;
pObj = docObj.pathItems.add();
pObj.setEntirePath([[base+x,0],[base+x,lenY]]);
pObj.filled = false; // 塗りなし
pObj.stroked = true; // 線あり
pObj.strokeWidth = 0.5; // 線幅0.5ポイント
pObj.fillColor = setColor(0,0,0); // 塗りの色を指定(黒色)
pObj.strokeColor = setColor(0,0,0); // 線の色を指定(黒色)
}
}
function log10(x) { return Math.LOG10E * Math.log(x); }
function setColor(r,g,b)
{
var tmpColor = new RGBColor();
tmpColor.red = r;
tmpColor.green = g;
tmpColor.blue = b;
return tmpColor;
}

[サンプルをダウンロード]