Попробуйте использовать следующий код.Это может вам помочь - это то же самое, что было в Cookbook :
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
# with this way you can load your csv-file really easy -- maybe you should change
# the last 'dtype' to 'int', because you said you have int for the last column
data = np.genfromtxt('output.csv', dtype=[('x',float),('y',float),('z',float)],
comments='"', delimiter='|')
# just an assigning for better look in the plot routines
x = data['x']
y = data['y']
z = data['z']
# just an arbitrary number for grid point
ngrid = 500
# create an array with same difference between the entries
# you could use x.min()/x.max() for creating xi and y.min()/y.max() for yi
xi = np.linspace(-1,1,ngrid)
yi = np.linspace(-1,1,ngrid)
# create the grid data for the contour plot
zi = griddata(x,y,z,xi,yi)
# plot the contour and a scatter plot for checking if everything went right
plt.contour(xi,yi,zi,20,linewidths=1)
plt.scatter(x,y,c=z,s=20)
plt.xlim(-1,1)
plt.ylim(-1,1)
plt.show()
Я создал пример выходного файла с гауссовым распределением в 2D.Мой результат с использованием кода сверху:

ПРИМЕЧАНИЕ:
Возможно, вы заметили, что края немного обрезаны.Это связано с тем, что функция griddata
создает маскированные массивы.Я имею в виду, что граница сюжета создается внешними точками.Всего за границей там нет.Если ваши точки будут на линии, то у вас не будет никакого контура для построения.Это отчасти логично.Я упоминаю об этом, из-за ваших четырех опубликованных данных.Кажется вероятным, что у вас есть этот случай.Может быть, у вас его нет =)
ОБНОВЛЕНИЕ
Я немного отредактировал код.Возможно, ваша проблема заключалась в том, что вы не разрешили правильно зависимости вашего входного файла.С помощью следующего кода сюжет должен работать правильно.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
import csv
data = np.genfromtxt('example.csv', dtype=[('x',float),('y',float),('z',float)],
comments='"', delimiter=',')
sample_pts = 500
con_levels = 20
x = data['x']
xmin = x.min()
xmax = x.max()
y = data['y']
ymin = y.min()
ymax = y.max()
z = data['z']
xi = np.linspace(xmin,xmax,sample_pts)
yi = np.linspace(ymin,ymax,sample_pts)
zi = griddata(x,y,z,xi,yi)
plt.contour(xi,yi,zi,con_levels,linewidths=1)
plt.scatter(x,y,c=z,s=20)
plt.xlim(xmin,xmax)
plt.ylim(ymin,ymax)
plt.show()
С этим кодом и вашим небольшим образцом я получаю следующий график:

Попробуйте использовать мой фрагмент и просто немного его изменить.Например, мне пришлось изменить для данного примера csv-файла разделитель с |
на ,
.Код, который я написал для вас, не очень хорош, но он написан предисловием.
Извините за поздний ответ.