Create Density Matrix From XY Data Points
hrodstein
// NOTE: This is experimental - not thoroughly tested.
//
// CreateDensityMatrix(xw, yw, numXElements, numYElements, matName)
// xw and yw contain the location of stars in a galaxy.
// We want to create a contour plot of the density of stars.
// To create a contour plot we first need to create a matrix whose X and Y
// values cover the range of data in xw and yw and whose Z values count
// the number of stars in a given box (pixel) in the matrix.
//
// Example:
// Make/O/N=10000 xData=gnoise(1), yData=gnoise(1)
// CreateDensityMatrix(xData, yData, 100, 100, "densityMat")
// NewImage densityMat
// AppendMatrixContour/T densityMat
Function CreateDensityMatrix(xw, yw, numXElements, numYElements, matName)
Wave xw, yw
Variable numXElements // Number of X elements in output matrix
Variable numYElements // Number of Y elements in output matrix
String matName // Name to use for output matrix
// Make matrix with specified number of X and Y elements.
// NOTE: This overwrites an existing wave with the specified name.
Make/O/N=(numXElements,numYElements) $matName
Wave mat = $matName // Create wave reference for the matrix
mat = 0
WaveStats/Q xw // Find the X range
Variable xMin = V_min
Variable xMax = V_max
Variable xSpan = xMax - xMin
WaveStats/Q yw
Variable yMin = V_min
Variable yMax = V_max
Variable ySpan = yMax - yMin
// Set the X and Y scaling of the matrix
SetScale x xMin, xMax, mat
SetScale y yMin, yMax, mat
// Create temporary wave containing the X element number for a given point in the input x wave
Variable numXPoints = numpnts(xw)
Make/O/N=(numXPoints) xElementNumbersTemp
xElementNumbersTemp = round(numXElements*(xw-xMin)/xSpan)
// Create temporary wave containing the Y element number for a given point in the input x wave
Variable numYPoints = numpnts(yw)
Make/O/N=(numYPoints) yElementNumbersTemp
yElementNumbersTemp = round(numYElements*(yw-yMin)/ySpan)
Variable xElement, yElement
for (xElement=0; xElement<numXElements; xElement+=1)
Variable xEl = xElementNumbersTemp[xElement]
for (yElement=0; yElement<numXElements; yElement+=1)
Variable yEl = yElementNumbersTemp[yElement]
mat[xEl][yEl] += 1
endfor
endfor
KillWaves/Z xElementNumbersTemp, yElementNumbersTemp
End
//
// CreateDensityMatrix(xw, yw, numXElements, numYElements, matName)
// xw and yw contain the location of stars in a galaxy.
// We want to create a contour plot of the density of stars.
// To create a contour plot we first need to create a matrix whose X and Y
// values cover the range of data in xw and yw and whose Z values count
// the number of stars in a given box (pixel) in the matrix.
//
// Example:
// Make/O/N=10000 xData=gnoise(1), yData=gnoise(1)
// CreateDensityMatrix(xData, yData, 100, 100, "densityMat")
// NewImage densityMat
// AppendMatrixContour/T densityMat
Function CreateDensityMatrix(xw, yw, numXElements, numYElements, matName)
Wave xw, yw
Variable numXElements // Number of X elements in output matrix
Variable numYElements // Number of Y elements in output matrix
String matName // Name to use for output matrix
// Make matrix with specified number of X and Y elements.
// NOTE: This overwrites an existing wave with the specified name.
Make/O/N=(numXElements,numYElements) $matName
Wave mat = $matName // Create wave reference for the matrix
mat = 0
WaveStats/Q xw // Find the X range
Variable xMin = V_min
Variable xMax = V_max
Variable xSpan = xMax - xMin
WaveStats/Q yw
Variable yMin = V_min
Variable yMax = V_max
Variable ySpan = yMax - yMin
// Set the X and Y scaling of the matrix
SetScale x xMin, xMax, mat
SetScale y yMin, yMax, mat
// Create temporary wave containing the X element number for a given point in the input x wave
Variable numXPoints = numpnts(xw)
Make/O/N=(numXPoints) xElementNumbersTemp
xElementNumbersTemp = round(numXElements*(xw-xMin)/xSpan)
// Create temporary wave containing the Y element number for a given point in the input x wave
Variable numYPoints = numpnts(yw)
Make/O/N=(numYPoints) yElementNumbersTemp
yElementNumbersTemp = round(numYElements*(yw-yMin)/ySpan)
Variable xElement, yElement
for (xElement=0; xElement<numXElements; xElement+=1)
Variable xEl = xElementNumbersTemp[xElement]
for (yElement=0; yElement<numXElements; yElement+=1)
Variable yEl = yElementNumbersTemp[yElement]
mat[xEl][yEl] += 1
endfor
endfor
KillWaves/Z xElementNumbersTemp, yElementNumbersTemp
End
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More
May 30, 2011 at 06:18 am - Permalink
#include <Bivariate Histogram 2>
Then close the Procedure Window. Now you will find under the Macros menu, an item "Bivariate Histogram" that leads to a submenu with variations on the theme. The documentation is entirely in the form of comments at the top of the procedure file. To read them, select Windows->Procedure Windows->Bivariate Histogram 2.ipf. The Macros menu items lead to a very simple GUI so that you don't have to type out the function invocation on the command line.
John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
June 1, 2011 at 10:18 am - Permalink