グラフの作成と編集

目次

グラフウィンドウの作成

Createメソッドは、新しいグラフの作成に使用されます。

GraphPage gp;
gp.Create("3D"); // 3Dテンプレートを使ってグラフを作成

グラフページのフォーマットを取得

GraphPage gp("Graph1");

Tree tr;
tr = gp.GetFormat(FPB_ALL, FOB_ALL, true, true);
out_tree(tr);

グラフページフォーマットを設定

次のサンプルコードは、2色のグラデーションでページの背景色をセットする方法を示しています。

Tree tr;
tr.Root.Background.BaseColor.nVal = SYSCOLOR_RED;
tr.Root.Background.GradientControl.nVal = 1;
tr.Root.Background.GradientColor.nVal = SYSCOLOR_BLUE;

GraphPage gp("Graph1");
if(0 == gp.UpdateThemeIDs(tr.Root) )
	gp.ApplyFormat(tr, true, true);

グラフレイヤのフォーマットを取得

GraphLayer gl = Project.ActiveLayer();

Tree tr;
tr = gl.GetFormat(FPB_ALL, FOB_ALL, true, true);
out_tree(tr);

グラフレイヤフォーマットを設定

以下のサンプルコードは、グラフレイヤオブジェクトの背景を黒線フォーマットにセットする方法を示します。

GraphLayer gl = Project.ActiveLayer();

Tree tr;
tr.Root.Background.Border.Color.nVal = SYSCOLOR_BLACK;
tr.Root.Background.Border.Width.nVal = 1;
tr.Root.Background.Fill.Color.nVal = SYSCOLOR_WHITE;

if( 0 == gl.UpdateThemeIDs(tr.Root) )
	gl.ApplyFormat(tr, true, true);

追加の線を表示

このサンプルは、追加の線、Y=0/X=0での線、反対の線を表示する方法を示しています。

GraphLayer gl = Project.ActiveLayer();
Axis axesX = gl.XAxis;	

axesX.Additional.ZeroLine.nVal = 1; // Y = 0の線を表示
axesX.Additional.OppositeLine.nVal = 1; // X軸の反対の線を表示

グリッド線を表示

このサンプルは、グリッド線の表示方法および色付けの方法を示しています。

色の値は、Originの内部のカラーパレットまたはRGB値へのインデックスにすることができます。 色の値についての詳細は、データ型と変数をご覧ください。

GraphLayer gl = Project.ActiveLayer();
Axis axisY = gl.YAxis;
Tree tr;	

// 主グリッド表示
TreeNode trProperty = tr.Root.Grids.HorizontalMajorGrids.AddNode("Show");
trProperty.nVal = 1;
tr.Root.Grids.HorizontalMajorGrids.Color.nVal = RGB2OCOLOR(RGB(100, 100, 220));
tr.Root.Grids.HorizontalMajorGrids.Style.nVal = 1; // 実線
tr.Root.Grids.HorizontalMajorGrids.Width.dVal = 1;

// 副グリッド表示
trProperty = tr.Root.Grids.HorizontalMinorGrids.AddNode("Show");
trProperty.nVal = 1;
tr.Root.Grids.HorizontalMinorGrids.Color.nVal = SYSCOLOR_GREEN; // 緑
tr.Root.Grids.HorizontalMinorGrids.Style.nVal = 2; // ドット
tr.Root.Grids.HorizontalMinorGrids.Width.dVal = 0.3;

if(0 == axisY.UpdateThemeIDs(tr.Root) )
{
	bool bRet = axisY.ApplyFormat(tr, true, true);
}

軸スケールの設定

このサンプルは、スケールのパラメータ、増分、スケールタイプなどをセットする方法を示しています。

GraphLayer gl = Project.ActiveLayer();
Axis axesX = gl.XAxis;  
 
axesX.Scale.From.dVal = 0;
axesX.Scale.To.dVal = 1;
axesX.Scale.IncrementBy.nVal = 0; // 0=値で増加; 1=主目盛の数
axesX.Scale.Value.dVal = 0.2; // 増分
axesX.Scale.Type.nVal = 0;// 線形
axesX.Scale.Rescale.nVal = 0; // 再スケールタイプ
axesX.Scale.RescaleMargin.dVal = 8; // 8パーセント

次のサンプルは、Y 軸の主目盛数をセットする方法を示しています。

GraphLayer gl = Project.ActiveLayer();
Axis axesY = gl.YAxis; 

axesY.Scale.IncrementBy.nVal = 1; // 0: 値で増加; 1: 主目盛の数
axesY.Scale.MajorTicksCount.nVal = 5;

軸フォーマットを取得

GraphLayer gl = Project.ActiveLayer();
Axis axisX = gl.XAxis;

// 軸フォーマット設定をツリーに取得
Tree tr;
tr = axisX.GetFormat(FPB_ALL, FOB_ALL, true, true);
out_tree(tr);

軸ラベルを設定

軸ラベルは、通常のテキストオブジェクトであり、GraphObjectクラスを使ってOrigin Cでアクセスできます。 デフォルトグラフでは、X軸はXBという名前で、Y軸はYLという名前になっています。 次のコードは、XおよびY軸ラベルにアクセスする方法を示し、デフォルトグラフがアクティブページとします。

GraphLayer gl = Project.ActiveLayer();    // アクティブグラフレイヤ取得

GraphObject grXL = gl.GraphObjects("XB"); // X軸ラベルを取得
GraphObject grYL = gl.GraphObjects("YL"); // Y軸ラベルを取得

これで、軸ラベルにアクセスし、値を変更できます。 次のコードは、X軸ラベルを直接セットし、Y軸ラベルをLabTalk文字列変数にリンクすることで間接的にセットします。 LabTalk変数へのリンクは、ラベルのプログラミング制御オプション"変数へリンク"を有効にする必要があります。 このオプションはデフォルトで有効になっています。

grXL.Text = "My New X Asis Label";

LT_set_str("abc$", "My String Variable");
grYL.Text = "%(abc$)";

ラベルが変わったことを確認するには、グラフページをリフレッシュする必要があります。 GraphLayerオブジェクトを使って、次のコードでページをリフレッシュできます。

gl.GetPage().Refresh();

上X軸を表示

このサンプルは、上X軸を表示する方法を示します。

// 軸と刻みを表示
Tree tr;	
TreeNode trProperty = tr.Root.Ticks.TopTicks.AddNode("Show");
trProperty.nVal = 1;

// 軸ラベルを表示
trProperty = tr.Root.Labels.TopLabels.AddNode("Show");
trProperty.nVal = 1;

GraphLayer gl = Project.ActiveLayer();
Axis axesX = gl.XAxis;
if(0 == axesX.UpdateThemeIDs(tr.Root) )
{
	bool bRet = axesX.ApplyFormat(tr, true, true);
}

軸目盛を編集

このサンプルは、軸ダイアログ->軸の主要設定(タイトル・形態)でフォーマットをセットする方法を示しています。

GraphLayer gl = Project.ActiveLayer();
Axis axesX = gl.XAxis;	

Tree tr;
// データプロットの色を従って、刻みの色を自動にセット
tr.Root.Ticks.BottomTicks.Color.nVal = INDEX_COLOR_AUTOMATIC;
tr.Root.Ticks.BottomTicks.Width.dVal = 3;
tr.Root.Ticks.BottomTicks.Major.nVal = 0; // 0:刻みを両側表示
tr.Root.Ticks.BottomTicks.Minor.nVal = 2; // 2:外側
tr.Root.Ticks.BottomTicks.Style.nVal = 0; // 実線

if(0 == axesX.UpdateThemeIDs(tr.Root) )
    bool bRet = axesX.ApplyFormat(tr, true, true);

軸目盛ラベルを編集

このサンプルは、指定した位置で軸ラベルをセットする方法を示します。軸ダイアログの軸目盛のカスタム化タブで同じ操作を行うことができます。

GraphLayer gl = Project.ActiveLayer();
Axis axesX = gl.XAxis;

Tree tr;
// スケール値として軸の開始と終了を表示
tr.Root.Labels.BottomLabels.Custom.Begin.Type.nVal = 2;	
tr.Root.Labels.BottomLabels.Custom.End.Type.nVal = 2;

// 特別な値とテキストを特定のポイントにセット
tr.Root.Labels.BottomLabels.Custom.Special.Type.nVal = 3;
tr.Root.Labels.BottomLabels.Custom.Special.Label.strVal = "Mid";
tr.Root.Labels.BottomLabels.Custom.Special.Value.dVal = 12;

if(0 == axesX.UpdateThemeIDs(tr.Root) )
{
	bool bRet = axesX.ApplyFormat(tr, true, true);
}

倍率の変更

このサンプルは、倍率の変更によってページサイズが変更されたときに、フォントサイズと線の太さをスケールする方法を示しています。

void change_graph_and_font_size(double dNewWidth = 5)
{
	GraphPage gp = Project.ActiveLayer().GetPage();
	Tree tr1;tr1 = gp.GetFormat(FPB_ALL, FOB_ALL, true, true);
	double dOldWidth = tr1.Root.Dimension.Width.dVal;
	double factor = dOldWidth/tr1.Root.Dimension.Height.dVal;
	Tree tr2;
	tr2.Root.Dimension.Width.dVal = dNewWidth;
	tr2.Root.Dimension.Height.dVal = dNewWidth / factor;
	if(0 == gp.UpdateThemeIDs(tr2.Root))
	{
		gp.ApplyFormat(tr2, true, true);
		string strScript;
		//page -afu : 倍率変更
		//win -z0 : ページをウィンドウサイズに合わせる
		strScript.Format("page -AFU %f;win -z0", -dNewWidth/dOldWidth);
		gp.LT_execute(strScript);
	}
}
Note:

この場合、tr1は現在の寸法を取得するためにのみ使用され、新しい値は適用されません。

これは、tr1にもグラフオブジェクトの位置設定があり、グラフの寸法を変更する場合は古くなっているためです。
正しい方法は、寸法の設定のみを適用することであり、グラフオブジェクトの位置は自動的に更新されます。