Hi, im trying to create a heatmap/colourmap/contour style plot similar to http://www.idlcoyote.com/cg_tips/outcontourbar.png but I cant seem to get it working correctly. The code takes a number of parameters on the command line because it is passed by an external PHP script. Essentially its a list of lat/lon/values which I want to interpolate and plot but I cant get anything like the image above, I cant get the vmin/vmax to work for the colorbar and I dont know why the whole plot is squared off rather than fading to white if you see what I mean
import os import tempfile import math os.environ['MPLCONFIGDIR'] = tempfile.mkdtemp() import argparse import numpy as np import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import scipy.interpolate width = 800 height = 600 lat_min = [] lon_min = [] lat_max = [] lon_max = [] # assumes lat is y, lon is x, and image is 800x600 def latToXY(lat): global width, height, lat_min, lat_max y = ((lat - lat_min) / (lat_max - lat_min)) * height #print y return y def lonToXY(lon): global width, height, lon_min, lon_max lon = math.fabs(lon) x = ((lon - lon_min) / (lon_max - lon_min)) * width #print x return x def scipy_idw(x, y, z, xi, yi): #interp = scipy.interpolate.Rbf(x, y, z, function='linear') interp = scipy.interpolate.Rbf(x, y, z) return interp(xi, yi) def plot(x,y,z,grid,legend_min,legend_max,filename): plt.figure() fig = plt.imshow(grid, vmin=legend_min, vmax=legend_max, extent=[0, 1024, 0, 768]) fig.axes.get_xaxis().set_visible(False) # hide axis labels fig.axes.get_yaxis().set_visible(False) #plt.hold(True) plt.scatter(x,y,c=z) plt.colorbar() plt.savefig(filename) # grab all floats from command line parser = argparse.ArgumentParser() parser.add_argument('--l1', type=str) parser.add_argument('--l2', type=str) parser.add_argument('--l3', type=str) parser.add_argument('--min', type=str) parser.add_argument('--max', type=str) parser.add_argument('--filename', type=str) args = parser.parse_args() # create a list by splitting at the comma l1_list = args.l1.split(',') # ['1','2','3','4'] l2_list = args.l2.split(',') l3_list = args.l3.split(',') legend_min = float(args.min) legend_max = float(args.max) filename = args.filename # convert string list to list of floats for i in range(len(l1_list)): l1_list[i] = float(l1_list[i]) l2_list[i] = float(l2_list[i]) l3_list[i] = float(l3_list[i]) lat_min = min( math.fabs(yy) for yy in l2_list ) lat_max = max( math.fabs(yy) for yy in l2_list ) lon_min = min( math.fabs(xx) for xx in l1_list ) lon_max = max( math.fabs(xx) for xx in l1_list ) # convert list of floats to x,y for i in range(len(l1_list)): l1_list[i] = lonToXY(l1_list[i]) l2_list[i] = latToXY(l2_list[i]) # convert list to numpy array x = np.array(l1_list) y = np.array(l2_list) z = np.array(l3_list) #print x #print y #print z nx, ny = 50, 50 xi, yi = np.linspace(x.min(), x.max(), nx), np.linspace(y.min(), y.max(), ny) xi, yi = np.meshgrid(xi, yi) xi, yi = xi.flatten(), yi.flatten() grid2 = scipy_idw(x,y,z,xi,yi) grid2 = grid2.reshape((ny, nx)) plot(x,y,z,grid2,legend_min,legend_max,filename) I call the script with the following parameters: plot.py --l1=-1.8791363,-1.8786206,-1.8796862,-1.878171 --l2=57.458459,57.458153,57.458495,57.458036 --l3=42.3,37.8,43.5,47.7 --min=0 --max=100 --filename=/tmp/plot.png Any help is greatly appreciated Thanks -- View this message in context: http://matplotlib.1069221.n5.nabble.com/matplolib-imshow-contour-heatmap-tp43078.html Sent from the matplotlib - users mailing list archive at Nabble.com. ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. Written by three acclaimed leaders in the field, this first edition is now available. Download your free book today! http://p.sf.net/sfu/13534_NeoTech _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users