3.3.15 Contour Plot from an XYZ Worksheet

Plot XYZ Contour from Worksheet and Custom Lines

Minimum Origin Version Required: Origin 8 SR0

This example to show how to plot XYZ contour and custom line colors, line styles, line thicknesses.

void plot_xyz_contour_ex1()
{
	int npts = 30;
	Worksheet wks;
	wks.Create();	    
	wks.SetSize(-1,3);
	wks.SetColDesignations("XYZ");
	
	// fill wks with some XYZ data
	Dataset dsX(wks, 0);
	Dataset dsY(wks, 1);
	Dataset dsZ(wks, 2);
	dsX.Data(1, npts);
	dsX *= 0.05;
	dsY.Normal(npts);
	dsY += 1.2;
	dsZ.Normal(npts);
	
	// then we construct the XYZ data range
	DataRange dr;
	dr.Add(wks, 0, "X");
	dr.Add(wks, 1, "Y");
	dr.Add(wks, 2, "Z");
	
	// in this example, we will create a new graph, but you can use any exisitng graph layer
	// as long as the layer is a 2D layer
	GraphPage gp;
	// You must use a 3D scatter/line template, you can first make a 3d scatter plot, 
	// make needed modifications, then save your own
	gp.Create("TriContour");
	if( gp )
	{
		GraphLayer gl = gp.Layers();
		if( gl )
		{
			int nPlot = gl.AddPlot(dr, IDM_PLOT_TRI_CONTOUR);
			DataPlot dp = gl.DataPlots(nPlot);
			gl.Rescale();			
			
			set_contour_lines(dp);
			gp.Refresh();
		}
	}
}


void set_contour_lines(DataPlot& dp)
{
	if(!dp)
		return;	

	// now we will set the colormap, we have to assume here that the color spectrum gr object is already in the 
	// layer to show the colormap
	double dMin = -1.5, dMax = 1.5;
	int nLevels = 20;
	double dInc = ( dMax - dMin ) / nLevels;
	vector vLevels;
	vLevels.Data(dMin, dMax, dInc);
	
	if( !dp.SetColormap(vLevels) )
		return;
	
	// line color
	int 			nNumColors = nLevels;
	vector<uint> 	vnColors;
	int nColorFrom = SYSCOLOR_YELLOW;
	int nColorTo = nColorFrom + nNumColors - 1;		
	vnColors.Data(nColorFrom, nColorTo, 1); 		
	
	// line styles
	vector<uint> vnStyles(vnColors.GetSize());
	vnStyles = 2; // Dot
	
	// line thickness
	vector vThickness(vnColors.GetSize());	
	vThickness = 2.0; 
	
	// set all lines are show
	vector<int> vLines(vnColors.GetSize());
	vLines = 1;

	Tree tr; 
	tr.ColorMap.Details.ShowLines.nVals = vLines; // to show all lines
	tr.ColorMap.ColorFillControl.nVal = 0; // to remove fill color
	tr.ColorMap.Details.LineColors.nVals = vnColors;
	tr.ColorMap.Details.LineStyles.nVals = vnStyles;	
	tr.ColorMap.Details.LineWidths.dVals = vThickness;		

	if(!dp.SetColormap(tr))
		return;	
	
}

Plot XYZ Contour from Worksheet and Custom Labels

Minimum Origin Version Required: Origin 8.1 SR2

This example to show how to plot XYZ contour and custom labels color and font.

To run this example, create a worksheet and import the following data first: <Origin Installation Directory>\Samples\Matrix Conversion and Gridding\XYZ Random Gaussian.dat.

void plot_xyz_contour_ex2()
{
   Worksheet wks = Project.ActiveLayer();  // get active worksheet
   if( !wks )
       return;
   
    // construct the XYZ data range
    DataRange dr;
    dr.Add(wks, 0, "X");
    dr.Add(wks, 1, "Y");
    dr.Add(wks, 2, "Z");
    
    GraphPage gp;
    gp.Create("TriContour");  // create contour graph
    if( gp )
    {
        GraphLayer gl = gp.Layers();
        if( gl )
        {
            int nPlot = gl.AddPlot(dr, IDM_PLOT_TRI_CONTOUR);  // add contour plot to layer
            DataPlot dp = gl.DataPlots(nPlot);  // get the added plot
            gl.Rescale();     // rescale layer
            
           // set_contour_lines(dp);  
           set_label_format(dp);  // set label format
                
            gp.Refresh();  // refresh graph
        }
    }
}

void set_label_format(DataPlot& dp)
{
	if(!dp)
		return;
	
	vector vLevels;
	BOOL bLogScale;
	if(!dp.GetColormap(vLevels, bLogScale))  // get colormap of plot
		return;
	
	int nNumLabels = vLevels.GetSize() - 1;  // number of labels
	vector<int> vnLabelShow(nNumLabels);
	vnLabelShow = 1;  // show labels
	
	Tree trFormat;
	trFormat.Root.ColorMap.Details.Labels.nVals = vnLabelShow;  // show labels
	trFormat.Root.Labels.Color.nVal = SYSCOLOR_MAGENTA;  // color=magenta
	trFormat.Root.Labels.Size.dVal = 30;  // size=30
	trFormat.Root.Labels.Bold.nVal = true; 
	trFormat.Root.Labels.Italic.nVal = true;
	
	if(0 == dp.UpdateThemeIDs(trFormat.Root))
		if(!dp.ApplyFormat(trFormat, true, true))   // apply format
			out_str("Failed to apply format!");
}