from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import matplotlib.pyplot as plt fig = plt.figure() ax = fig.gca(projection='3d') d = {} for line in open("values.txt"): v = map(float, line.strip().split()) try: if (v[0], v[2]) in d: d[(v[0], v[2])] = min(d[(v[0], v[2])], v[3]) else: d[(v[0], v[2])] = v[3] except: continue x, y, z = [], [], [] for k, v in d.iteritems(): x.append(k[0] / 1000000.) y.append(k[1] / 1000000.) z.append(v / 100000.) print x surf = ax.plot_trisurf(x, y, z) plt.show()