3.5.5 Accessing Group Plots Format
Setting Grouped Format of Line + Symbol Plots
Minimum Origin Version Required: Origin8 SR2
This example is used to set grouped format for grouped plots with Line + Symbol type, including line color, line style, symbol shape and symbol interior.
To run this example, please run the following LabTalk first to create the desired graph.
newbook; // create a new workbook
fname$ = system.path.program$ + "Samples\Curve Fitting\Multiple Gaussians.dat"; // file path
impasc; // import data file
plotxy iy:=(?,1:end) plot:=202; // plot line+symbol
void grouped_line_symbol()
{
GraphLayer gl = Project.ActiveLayer();
if(!gl)
{
out_str("Cannot get the graph layer!");
return;
}
GroupPlot gplot = gl.Groups(0);
if(!gplot)
{
out_str("Cannot get the group plot!");
return;
}
vector<int> vNester;
// the Nester is an array of types of objects to do nested cycling in the group
vNester.SetSize(4); // four types of setting to do nested cycling in the group
vNester[0] = 0; // cycling line color in the group
vNester[1] = 3; // cycling symbol type in the group
vNester[2] = 2; // cycling line style in the group
vNester[3] = 8; // cycling symbol interior in the group
gplot.Increment.Nester.nVals = vNester; // set Nester of the grouped plot
int nNumPlots = gl.DataPlots.Count(); // nNumPlots = 4 in this example
vector<int> vLineColor, vSymbolShape, vLineStyle, vSymbolInterior;
// four vectors for setting line color, symbol shape, line style and symbol interior of grouped plots
vLineColor.SetSize(nNumPlots);
vSymbolShape.SetSize(nNumPlots);
vLineStyle.SetSize(nNumPlots);
vSymbolInterior.SetSize(nNumPlots);
// setting corresponding values to four vectors
for(int nPlot=0; nPlot<nNumPlots; nPlot++)
{
if(nNumPlots>=4)
{
switch (nPlot)
{
case 0: // setting for plot 0
vLineColor[nPlot] = SYSCOLOR_BLUE;
vSymbolShape[nPlot] = 1; // square
vLineStyle[nPlot] = 1; // dash
vSymbolInterior[nPlot] = 1; // open
break;
case 1: // setting for plot 1
vLineColor[nPlot] = SYSCOLOR_OLIVE;
vSymbolShape[nPlot] = 3; // up triangle
vLineStyle[nPlot] = 2; // dot
vSymbolInterior[nPlot] = 2; // dot center
break;
case 2: // setting for plot 2
vLineColor[nPlot] = SYSCOLOR_RED;
vSymbolShape[nPlot] = 5; // diamond
vLineStyle[nPlot] = 6; // short dot
vSymbolInterior[nPlot] = 5; // x center
break;
default: // setting for other plot
vLineColor[nPlot] = SYSCOLOR_CYAN;
vSymbolShape[nPlot] = 8; // hexagon
vLineStyle[nPlot] = 0; // solid
vSymbolInterior[nPlot] = 0; // solid
break;
}
}
}
Tree trFormat;
trFormat.Root.Increment.LineColor.nVals = vLineColor; // set line color to theme tree
trFormat.Root.Increment.Shape.nVals = vSymbolShape; // set symbol shape to theme tree
trFormat.Root.Increment.LineStyle.nVals = vLineStyle; // set line style to theme tree
trFormat.Root.Increment.SymbolInterior.nVals = vSymbolInterior; // set symbol interior to theme tree
if(0 == gplot.UpdateThemeIDs(trFormat.Root) )
{
bool bb = gplot.ApplyFormat(trFormat, true, true); // apply theme tree
}
}
Setting Colors for Grouped Bars
Minimum Origin Version Required: Origin 7.5
The following example is used to set the colors of grouped bars. The colors are customized according to the column names. So, you can specify the unique color to the bar created from the column with the specified name. As the example shows, the bar created from the column named "N" will always have the red color.
To run this example, please run the following LabTalk script first to create the desired graph.
win -n wks ColumnColor; // create a new window
wks.addcol(A); // add column named A
ColumnColor_A[1] = 1; // set cell one with 1;
wks.col1.type = 4; // set to X column
wks.addcol(B);
ColumnColor_B[1] = 2;
wks.addcol(O);
ColumnColor_O[1] = 3;
wks.addcol(P);
ColumnColor_P[1] = 4;
wks.addcol(C);
ColumnColor_C[1] = 5;
wks.addcol(N);
ColumnColor_N[1] = 6;
wks.addcol(D);
ColumnColor_D[1] = 7;
worksheet -s 1 1 wks.ncols 1; // select cell one of all columns
worksheet -p 203 column; // make grouped bar plots;
void bar_color_map()
{
GraphLayer gl = Project.ActiveLayer(); // get active graph layer
if(!gl)
{
out_str("Cannot get the active graph layer!" );
return;
}
GroupPlot gpl = gl.Groups(0); // get first grouped plots
vector<int> vcColors;
int nPlotCount = gl.DataPlots.Count(); // get number of plots
vcColors.SetSize(nPlotCount); // set vector size
for(int nColor=0; nColor<nPlotCount; nColor++) // set color vector according to the column name
{
DataPlot dp = gl.DataPlots(nColor); // get dataplot
string strDatasetName = dp.GetDatasetName();
int nStart = strDatasetName.Find('_'); // find delimited "_", between workbook name and colcumn name
int nEnd = strDatasetName.Find('@'); // find delimited "@", between column name and worksheet index
string strColName;
// get column name
if(nEnd == -1) // workbook contains only one worksheet
strColName = strDatasetName.GetToken(1, '_');
else // workbook contains more than one worksheet
strColName = strDatasetName.Mid(nStart+1, nEnd-nStart-1);
if(0 == strColName.Compare("C")) // set color value one by one
vcColors[nColor] = 0; // 0 = black
else if(0 == strColName.Compare("N"))
vcColors[nColor] = 1; // 1 = red
else if(0 == strColName.Compare("O"))
vcColors[nColor] = 2; // 2 = green
else if(0 == strColName.Compare("P"))
vcColors[nColor] = 3; // 3 = blue
else
vcColors[nColor] = 4; // 4 = cyan
}
gpl.Increment.BackgroundColor.nVals = vcColors; // set increment colors
}
Setting Offset Individually for Grouped Plots
This example is used to set the offset of the grouped plot individually.
Please run the following LabTalk script to create the desired graph first.
newbook; // create a new workbook
fname$ = system.path.program$ + "Samples\Graphing\Group.DAT"; // file path
impasc; // import data file
plotxy iy:=(?, 1:end) plot:=200; // plot line
void set_offset(int nPlotLTIndex, double xOffset, double yOffset)
{
GraphLayer gl = Project.ActiveLayer(); // get the active graph layer
if(!gl)
{
out_str("Please activate a graph!");
return;
}
GroupPlot grPlot = gl.Groups(0); // get the first grouped plot
if(!grPlot)
{
out_str("Invalid grouped plot!");
return;
}
if(nPlotLTIndex <= 0 || nPlotLTIndex > grPlot.GetCount())
{
out_str("Invalid plot index!");
return;
}
Tree trFormat;
trFormat.Root.Stack.Offset.dVal = 4; // set Stack to Individual
trFormat.Root.Stack.X.dVal = 1; // enable X offset
trFormat.Root.Stack.Y.dVal = 1; // enable Y offset
if(0 == gl.UpdateThemeIDs(trFormat.Root))
{
bool bRet = gl.ApplyFormat(trFormat, true, true); // enable settings of offset individually
if(bRet)
{
DataPlot dp = grPlot.GetDataPlot(nPlotLTIndex - 1); // get the plot in the layer
string strPlotName = dp.GetDatasetName(); // get the plot name
string strLTPlotXOffset, strLTPlotYOffset;
strLTPlotXOffset.Format("set %s -sx %f;", strPlotName, xOffset); // set x offset of the plot
strLTPlotYOffset.Format("set %s -sy %f;", strPlotName, yOffset); // set y offset of the plot
gl.LT_execute(strLTPlotXOffset + strLTPlotYOffset); // execute the LabTalk command
}
}
}
To set the offset of the 2nd plot in x and y direction with 2 and 3 respectively, run
set_offset 2 2 3;
Setting special point format of one plot of group plots
This example shows how to access theme of one plot in group.
To run this example, please
- select 3 columns(XYY) to plot a 2d scatter graph
- select one data point of the 2nd plot and double click to open Plot Details dialog
- go to label tab, check enable to show the label for this point
void test_group_plot_special_point_format()
{
GraphLayer gl = Project.ActiveLayer();
int nCount = gl.DataPlots.Count();
DataPlot dp = gl.DataPlots(nCount > 1 ? 1 : 0);
//System variable @PGT: theme for plot in group,
//1 for using group theme (default, old behavior)
//0 for using plot's own theme
LTVarTempChange pgt("@PGT", 0);
Tree tr;
tr = dp.GetFormat(FPB_ALL, FOB_ALL, TRUE, TRUE);
tr.Root.Points.Point1.Label.Size.dVal = 30;
tr.Root.Points.Point1.Label.AutoFace.nVal = 0;
tr.Root.Points.Point1.Label.Face.nVal = 2;
dp.UpdateThemeIDs(tr.Root);
dp.ApplyFormat(tr, true, true);
}
|