Graphing
Contents
- 1 Control Plots As Group
- 2 Custom Linked Axis
- 3 Customize Legend
- 4 Customizing Graph
- 5 Graph Legend to Show Only First Plot
- 6 Line Plot with Log Scale
- 7 Merge Graphs
- 8 Multiple Layer Plot
- 9 Plot Contour and 3D Surface Graph
- 10 Plot From Data Range
- 11 Plot Heatmap from Matrix Data
- 12 Plot Symbols Indexed by Column Values
- 13 Plotting 2D Contour Plot via Virtual Matrix
- 14 Stacked Column Plot
This folder contains examples of plotting and customizing graphs with Python originpro package.
For the graph related functions in originpro, see Graph.
Control Plots As Group
''' This sample plots a whole worksheet as XY plot and control plots in group ''' import os import originpro as op wks = op.new_sheet() wks.from_file(os.path.join(op.path('e'), 'Samples', 'Graphing', 'Group.dat')) graph = op.new_graph(template='scatter') gl=graph[0] # plot whole sheet as XY plot plot = gl.add_plot(f'{wks.lt_range()}!(?,1:end)') # group the plots and control plots setting in group gl.group() plot.colormap = 'Candy' plot.shapelist = [3, 2, 1] gl.rescale() # Customize Legend lgnd = gl.label('Legend') lgnd.set_int('fsize', 22) lgnd.set_int('left',1400) lgnd.set_int('top',700) lgnd.set_int('showframe',0)
Custom Linked Axis
''' This sample shows how to customize the linked axis to make a functionally mapped double-X graph ''' import originpro as op graph = op.new_graph() gl = graph[0] gl.axis('x').title='Fahrenheit' # add Top-X layer gl2 = graph.add_layer(1) # use LabTalk change top axis' title op.lt_exec('xt.text$=Celsius') # mapped Double-X, Fahrenheit to Celsius conversion gl2.set_str('x.link.from', '(X1-32)/1.8') gl2.set_str('x.link.to', '(X2-32)/1.8') gl2.set_int('x.showgrids',1) gl2.set_int('x.grid.majorType',2) # use temperature data to plot wks = op.new_sheet() wks.from_file(op.path('e')+r"Samples\Statistics\temperature.dat") gl.activate() gl.add_plot(wks, coly=1, colx=0, type='s') gl.rescale()
Customize Legend
''' This sample shows how to customize the legend ''' import originpro as op wks = op.new_sheet() wks.from_file(op.path('e')+r"Samples\Graphing\Group.dat") # plot whole sheet as XY plot graph = op.new_graph(template='scatter') gl = graph[0] plot = gl.add_plot(f'{wks.lt_range()}!(?,1:end)') # group the plots and control plots setting in group gl.group() plot.colormap = 'Candy' plot.shapelist = [3, 2, 1] gl.rescale() # Customize Legend, use set_* function to set legend's LabTalk property lgnd = gl.label('Legend') lgnd.set_int('showframe', 0) # use x/y axis end value to set legend center x/y position xto = gl.get_float('x.to') yto = gl.get_float('y.to') lgnd.set_float('x', xto - lgnd.get_float('dx') / 2) lgnd.set_float('y', yto - lgnd.get_float('dy') / 2)
Customizing Graph
''' This sample shows how to format graphs ''' import originpro as op # make a scatter plot wks = op.new_sheet() wks.from_file(op.path('e') + 'Samples\Graphing\Group.dat') graph = op.new_graph(template='Scatter') gl = graph[0] plot = gl.add_plot(wks, coly=1, colx=0) gl.rescale() # change layer background color # use set_* to access object's LabTalk property gl.set_int('color', 7) # change plot color plot.color = 2 # show grid lines gl.set_int('x.showgrids',1) gl.set_int('y.showgrids',1) # show axis opposite line gl.set_int('x.opposite',1) gl.set_int('y.opposite',1)
Graph Legend to Show Only First Plot
''' This sample shows how to make a multi-layer graph and show legend only on the top layer and to show only legend for the first plot, while each layer has 3 plots. ''' import os import originpro as op # Input three data files into three worksheets within one workbook wb = op.new_book() wb.set_int('nLayers',3) # Set number of sheets for wks, fn in zip(wb, ['S15-125-03.dat', 'S21-235-07.dat', 'S32-014-04.dat']): wks.from_file(os.path.join(op.path('e'), 'Samples', 'Import and Export', fn)) # Add data plots onto the graph gp = op.new_graph(template='PAN2VERT') # load Vertical 2 Panel graph template # Loop over layers and worksheets to add individual curve. for i, gl in enumerate(gp): for wks in wb: plot = gl.add_plot(wks,1+i) gl.group() gl.rescale() # Customize legend lgnd = gp[1].label('Legend') lgnd.set_int('left',4900) lgnd.set_int('top',100) #must have something different from internal "\l(1) %(1)" to prevent auto expending #so I just added a space, but you can add a caption or whatever as long as it is #different from the generic internal form lgnd.text=' \l(1) %(1)' #we only need one legend, so the one in layer1 will not be needed gp[0].label('Legend').remove()
Line Plot with Log Scale
''' This sample creates a sample signal and uses this package to create a periodogram power spectral density plot. This example requires certain Python packages. To check for and install if needed, open the Script Window (Shift+Alt+3), type the following and press Enter: pip -chk scipy numpy ''' import numpy as np from scipy import signal import originpro as op # periodogram power spectral density fs = 10e3 N = 1e5 amp = 2*np.sqrt(2) freq = 1234.0 noise_power = 0.001 * fs / 2 time = np.arange(N) / fs x = amp*np.sin(2*np.pi*freq*time) x += np.random.normal(scale=np.sqrt(noise_power), size=time.shape) f, Pxx_den = signal.periodogram(x, fs) # put the data into worksheet wks = op.new_sheet(type='w', lname='Periodogram Power Spectral') wks.from_list(0, f, lname='Freq', units='Hz') wks.from_list(1, Pxx_den, lname='PSD', units='V\+(2)/Hz') graph = op.new_graph(template='line') #log scale graph[0].yscale = 2 graph[0].set_xlim(begin=0, end=5000, step=1000) #step=2 in log graph[0].set_ylim(1e-7, 1e2, 2) graph[0].label('legend').remove() #page.aa in LT, anti-alias -> On graph.set_int('aa', 1) # plot the data into the graph plot = graph[0].add_plot(wks, coly=1, colx=0, type='line') plot.color = '#167BB2'
Merge Graphs
''' This sample shows how to merge Graph1, Graph2...... Graph10 ''' import originpro as op ids = list(range(1,11)) graphs = ["Graph" + str(i) for i in ids] graphs = '\n'.join(graphs) ltStr = f'merge_graph option:=specified option:=specified graphs:="{graphs}" row:=2 col:=5;' op.lt_exec(ltStr)
Multiple Layer Plot
''' This sample shows how to make multi-layer graph with Python where data on each layer is from different worksheet. Legend is customized to show sheet name. ''' import os import originpro as op # Input three data files into three worksheets within one workbook wb = op.new_book() wb.set_int('nLayers',3) # Set number of sheets for wks, fn in zip(wb, ['S15-125-03.dat', 'S21-235-07.dat', 'S32-014-04.dat']): wks.from_file(os.path.join(op.path('e'), 'Samples', 'Import and Export', fn)) # Add data plots onto the graph gp = op.new_graph(template='PAN2VERT') # load Vertical 2 Panel graph template # Loop over layers and worksheets to add individual curve. for i, gl in enumerate(gp): for wks in wb: plot = gl.add_plot(wks,1+i) gl.group() gl.rescale() # Customize legend lgnd = gp[1].label('Legend') lgnd.text='\l(1) %(1, @ws)\n\l(2) %(2, @ws)\n\l(3) %(3, @ws)' lgnd.set_int('left',4900) lgnd.set_int('top',100) gp[0].label('Legend').remove()
Plot Contour and 3D Surface Graph
''' This sample shows how to plot contour and 3D colormap surface from XYZ data. The Graph template names and IDs can be found in the page: https://www.originlab.com/doc/LabTalk/ref/Plot-Type-IDs ''' import originpro as op #Import Data File wks = op.new_sheet() f = op.path('e')+r'Samples\Matrix Conversion and Gridding\XYZ Random Gaussian.dat' wks.from_file(f) wks.cols_axis('xyz') # Plot 3D surface gp = op.new_graph(template='glCMAP') p = gp[0].add_plot(wks,coly=1,colx=0,colz=2, type=103) gp[0].rescale() # Plot contour gp = op.new_graph(template='TriContour') p = gp[0].add_plot(wks,coly=1,colx=0,colz=2, type=243) p.colormap = 'Maple.pal' gp[0].rescale()
Plot From Data Range
''' This sample shows how to use data range to make plot. ''' import os import originpro as op # Import the data file wks = op.new_sheet() wks.from_file(os.path.join(op.path('e'), 'Samples', 'Statistics', 'ANOVA', 'One-Way_ANOVA_indexed.dat')) # Create a graph page graph = op.new_graph(template='scatter') gl=graph[0] # Use the data range string as add_plot() argument. plot = gl.add_plot(f'{wks.lt_range()}!(1,3)[1:20]') plot = gl.add_plot(f'{wks.lt_range()}!(1,3)[21:40]') plot = gl.add_plot(f'{wks.lt_range()}!(1,3)[41:60]') gl.group() gl.rescale() # Customize legend lgnd = gl.label('Legend') lgnd.text='\l(1) class 1 \l(2) class 2 \l(3) class 3' lgnd.set_int('left',1400) lgnd.set_int('showframe',0)
Plot Heatmap from Matrix Data
''' This sample shows how to plot a heatmap from matrix data It also shows how to set matrix xy map, color scale title and how to set plot colormap ''' import originpro as op import numpy as np arr = np.array([[1, -8], [3, -4], [5, 4], [7, 8]]) mat = op.new_sheet(type='m') mat.from_np(arr) #set the 1st matrix's long name, which is the Z lable, which the color scale will use as title mat.set_label(0, 'Z Levels') #set the XY mapping in the matrix which will provde the XY scale for the graph x1,x2,y1,y2 = 0.5, 2.5, 0.5, 4.5 mat.xymap = x1,x2,y1,y2 gr = op.new_graph(template='Heat_Map.otpu') g = gr[0] p = g.add_mplot(mat, 0, type = 105) #heatmap is showing data point at the center, so need to adjust for half step size hs = 0.5 * (x2-x1)/2; g.set_ylim(y1-hs, y2+hs, 1) g.set_xlim(x1-hs, x2+hs, 1) #set plot colormap z = p.zlevels z['minors'] = 15 z['levels'] = [-8, 0, 8] p.zlevels = z p.colormap = 'BlueYellow.pal'
Plot Symbols Indexed by Column Values
''' This sample creates a scatter plot from the A(x) B(y) and control plot symbols from: col(C) = color index (1=black,2=red etc), offset = 1 from Y which is col(B) col(D) or col(4), or offset=2 from col(B) = symbol type and so on modi_col is for genreal modifier control color_col is specific to color which can further control color types, index, direct RGB, colormap ''' import originpro as op wks = op.new_sheet(); wks.cols=6 x=[1,2,3,4,5] for i in range(6): wks.from_list(i,x) graph = op.new_graph(template='scatter') layer = graph[0] plot = layer.add_plot(wks, coly=1, colx=0) layer.rescale() plot.color = op.color_col(1, 'n')# the +1 column, n=index plot.symbol_kind = op.modi_col(2) plot.symbol_size = op.modi_col(3) plot.symbol_sizefactor=10 plot.symbol_interior = op.modi_col(4)
Plotting 2D Contour Plot via Virtual Matrix
''' This sample shows how to use virtual matrix to make a contour plot ''' import originpro as op # new a graph with Contour template gp = op.new_graph(template='Contour') # prepare data wks = op.new_sheet() wks.from_file(op.path('e')+"Samples\Graphing\VSurface 1.dat") # use LabTalk call plotvm X-Function # 226 = IDM_PLOT_CONTOUR # add plot to gp's first layer ltStr = r'plotvm irng:=1! format:=xacross rowpos:=selrow1 colpos:=selcol1 ztitle:="VSurface 1" type:=226 ogl:='+ f'{gp[0]}!' op.lt_exec(ltStr) # set X scale type to Log10 gp.activate() gp[0].xscale=2 gp[0].set_xlim(11, 100) gp[0].set_ylim(3, 7)
Stacked Column Plot
''' This sample shows how to make a stacked cloumn plots ''' import originpro as op # import data wks = op.new_sheet() wks.from_file(op.path('e') + 'Samples\Graphing\Group.dat') # add plots and group the plots graph = op.new_graph(template='StackColumn') gl = graph[0] gl.add_plot(wks, coly=1, colx=0, type='?') gl.add_plot(wks, coly=2, colx=0, type='?') gl.group(True, 0, 1) # set stack offset of plots to Cumulative gl.lt_exec('layer -b s 1') # set column plot gap gl.lt_exec('set %C -vg 40')