データプロットを追加する
Plotting, from Worksheetプロット または データプロット は、グラフレイヤ内のデータ表示です。 各グラフレイヤには、1つ以上のプロットが含まれます。
2D グラフ (XY, Yエラー, 縦棒/横棒)
XY散布図をプロット
Graph Layer, Add XY Data PlotGraph Layer, Rescale次のコードは、アクティブワークシートからXYYErrデータ範囲を構築する方法を示し、新しく作成したグラフでデータ範囲をプロットします。
Worksheet wks = Project.ActiveLayer();
// 範囲名は、X, Y, Z, ED(YErr)にする
DataRange dr;
dr.Add(wks, 0, "X"); // 第1列はXデータ
dr.Add(wks, 1, "Y"); // 第2列はYデータ
dr.Add(wks, 2, "ED"); // 第1列はYエラーデータ(任意)
// グラフウィンドウを作成
GraphPage gp;
gp.Create("Origin");
GraphLayer gl = gp.Layers(); // アクティブレイヤを取得
// XYデータ範囲を散布図としてプロット
// IDM_PLOT_SCATTER はプロットタイプIDで、他のタイプのIDはoPlotIDs.h ファイルを確認
int nPlotIndex = gl.AddPlot(dr, IDM_PLOT_SCATTER);
// プロットインデックス(オフセットは0)を返す、エラーは-1を返す
if( nPlotIndex >= 0 )
{
gl.Rescale(); // 軸を再スケールしすべてのデータポイントを表示
}
Yエラープロットを付ける
Graph Layer, Add YErr Data PlotDataPlot, Error BarGraph Layer, Get Active Data PlotYErrデータを既存のXYデータプロットに付加します。
GraphLayer gl = Project.ActiveLayer();
DataPlot dp = gl.DataPlots(-1); // アクティブデータプロットを取得
// Yエラー列を取得
WorksheetPage wksPage("Book1");
Worksheet wks = wksPage.Layers();
Column colErrBar(wks, 2);
// アクティブデータプロットにYエラー列をプロット
Curve crv(dp);
int nErrPlotIndex = gl.AddErrBar(crv, colErrBar);
out_int("nErrPlotIndex = ", nErrPlotIndex);
縦棒/横棒グラフ
Graph Layer, Add Bar/Column PlotDataPlot, Bar/Column
// 実行前にアクティブウィンドウがワークシートであることを確認
Worksheet wks = Project.ActiveLayer();
DataRange dr;
dr.Add(wks, 1, "Y"); // 1列を持つデータ範囲を構築
GraphPage gp;
gp.Create("BAR"); // 指定したテンプレートでグラフを作成
GraphLayer gl = gp.Layers(-1); // アクティブグラフレイヤを取得
int index = gl.AddPlot(dr, IDM_PLOT_BAR);
if( index >= 0 )
{
out_str("Plot bar");
gl.Rescale();
}
3Dグラフ
Graph Layer, Add 3D Surface PlotMatrixbook, Open OGM File in WindowPlotting, from Matrix
行列からグラフウィンドウに3D曲面図をプロットします。
// 行列データを用意
MatrixLayer ml;
string strFile = GetAppPath(true) + "Samples\\Matrix Conversion and Gridding\\
2D Gaussian.ogm";
ml.Open(strFile);
MatrixObject mo = ml.MatrixObjects(0);
// テンプレートでグラフページを作成
GraphPage gp;
gp.Create("CMAP");
GraphLayer gl = gp.Layers(0);
// 3D 曲面図をプロット
int nPlotIndex = gl.AddPlot(mo, IDM_PLOT_SURFACE_COLORMAP);
if(0 == nPlotIndex)
{
gl.Rescale();
printf("3D Surface plotted successfully\n");
}
等高線図Graph Layer, Add Contour PlotDataPlot, Contour
XYZ 等高線図をプロット
// 実行前に、アクティブワークシートウィンドウにXYZデータがあることを確認
// または、\Samples\Matrix Conversion and Gridding\
// XYZ Random Gaussian.dat をワークシートにインポート
Worksheet wks = Project.ActiveLayer();
DataRange dr;
dr.Add(wks, 0, "X");
dr.Add(wks, 1, "Y");
dr.Add(wks, 2, "Z");
// テンプレートでグラフページを作成
GraphPage gp;
gp.Create("TriContour");
GraphLayer gl = gp.Layers();
// タイプIDでXYZ等高線をプロット
int nPlot = gl.AddPlot(dr, IDM_PLOT_TRI_CONTOUR);
if( nPlot >= 0 )
{
gl.Rescale();
printf("XYZ contour plotted successfully\n");
}
色付き等高線をプロット
MatrixLayer ml = Project.ActiveLayer();
MatrixObject mo = ml.MatrixObjects(0);
// テンプレートでグラフウィンドウを作成
GraphPage gp;
gp.Create("contour");
GraphLayer gl = gp.Layers();
int nPlot = gl.AddPlot(mo, IDM_PLOT_CONTOUR);
if( nPlot >= 0 )
{
gl.Rescale();
}
イメージプロットGraph Layer, Add Matrix Image PlotDataPlot, Image Type
MatrixLayer ml = Project.ActiveLayer();
MatrixObject mo = ml.MatrixObjects(0);
// テンプレートでグラフウィンドウを作成
GraphPage gp;
gp.Create("image");
GraphLayer gl = gp.Layers();
int nPlot = gl.AddPlot(mo, IDM_PLOT_MATRIX_IMAGE);
if( nPlot >= 0 )
{
gl.Rescale();
}
複数軸Graph Layer, Double-Y Axes
次のサンプルコードは、1つのグラフレイヤ内の4つの軸-左、下、右、上の表示/非表示をセットし、フォーマットをセットする方法を示します。
#include <..\Originlab\graph_utils.h> // AXIS_* で必要
GraphLayer gl = Project.ActiveLayer();
// 全ての軸とラベルを表示。0 または 1, 1 は表示。
vector<int> vnAxes(4), vnLabels(4), vnTitles(4);
vnAxes[AXIS_BOTTOM] = 1;
vnAxes[AXIS_LEFT] = 1;
vnAxes[AXIS_TOP] = 1;
vnAxes[AXIS_RIGHT] = 1;
vnLabels = vnAxes;
// 左と下の軸の軸タイトルを表示。0 または 1, 1 は表示。
vnTitles[AXIS_BOTTOM] = 1;
vnTitles[AXIS_LEFT] = 1;
vnTitles[AXIS_TOP] = 0;
vnTitles[AXIS_RIGHT] = 0;
// すべての軸の主刻みと副刻みを内側にセット
// 他のオプションについてはgraph_utils.hのTICK_*項目を参照
vector<int> vnMajorTicks(4), vnMinorTicks(4);
vnMajorTicks[AXIS_BOTTOM] = TICK_IN;
vnMajorTicks[AXIS_LEFT] = TICK_IN;
vnMajorTicks[AXIS_TOP] = TICK_IN;
vnMajorTicks[AXIS_RIGHT] = TICK_IN;
vnMinorTicks = vnMajorTicks;
gl_smart_show_object(gl, vnAxes, vnLabels, vnTitles, vnMajorTicks, vnMinorTicks);
複数区分グラフ (X軸を共有した複数レイヤ) Plotting in Multiple Graph LayersGraph Layer, Set Ticks and TickLabels as Auto ColorGraph Page, Arrange Layers
次のサンプルは、1つのグラフページに複数のグラフレイヤを構築し、すべてのレイヤのX軸を共有し、XYデータセットをワークシートデータから各グラフレイヤにプロットする方法を示します。
次のコードをコンパイルする前に、現在のワークスペースにgraph_utils.cをビルドするために、次のコマンドを実行する必要があります。
run.LoadOC(Originlab\graph_utils.c, 16);
次のOrigin Cコードをコンパイルします。実行する前に、1つのX列と少なくとも2つのY列を持つBook1というワークブックがあることを確認します。
#include <..\Originlab\graph_utils.h> //page_add_layer 関数に対して必要
// Book1からデータ範囲を構築
WorksheetPage wksPage("Book1");
Worksheet wks = wksPage.Layers(0); // Book1の最初のワークシートを取得
DataRange dr;
dr.Add(wks, 0, "X"); // Xデータを第1列
dr.Add(wks, 1, "Y", -1); // 最後のYデータを第2列
// Yの数を取得
DWORD dwRules = DRR_GET_DEPENDENT | DRR_NO_FACTORS;
int nNumYs = dr.GetNumData(dwRules);
// 右軸を持つレイヤを追加し、最初のレイヤにリンク
GraphPage gp;
gp.Create("Origin");
while ( gp.Layers.Count() < nNumYs )
{
page_add_layer(gp, false, false, false, true,
ADD_LAYER_INIT_SIZE_POS_MOVE_OFFSET, false, 0, LINK_STRAIGHT);
}
// ループして各XYデータからグラフレイヤにプロットを追加
foreach(GraphLayer gl in gp.Layers)
{
int nLayerIndex = gl.GetIndex();
// drから部分XY範囲を取得
DataRange drOne;
dr.GetSubRange(drOne, dwRules, nLayerIndex);
// 1つのXY範囲をグラフレイヤにプロット
int nPlot = gl.AddPlot(drOne, IDM_PLOT_LINE);
if( nPlot >= 0 )
{
DataPlot dp = gl.DataPlots(nPlot);
dp.SetColor(nLayerIndex); //データプロットを異なる色にセット
// 右Y軸の軸刻みと軸ラベルの色を自動にセット
gl.YAxis.AxisObjects(AXISOBJPOS_AXIS_SECOND).RightTicks.Color.nVal =
gl.YAxis.AxisObjects(AXISOBJPOS_LABEL_SECOND).RightLabels.Color.nVal =
INDEX_COLOR_AUTOMATIC;
gl.Rescale();
}
}
|