Контурный график Matplotlib с пересекающимися контурными линиями

Я пытаюсь построить контурный график следующих данных, используя matplotlib в Python. Данные имеют следующую форму -

# x       y      height
  77.23  22.34     56
  77.53  22.87     63
  77.37  22.54     72
  77.29  22.44     88

На самом деле данные состоят из почти 10 000 точек, которые я читаю из входного файла. Однако набор различных возможных значений z невелик (в пределах 50-90, целые числа), и я хочу иметь контурные линии для каждого такого отличного z.

Вот мой код -

import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import csv
import sys

# read data from file
data = csv.reader(open(sys.argv[1], 'rb'), delimiter='|', quotechar='"')
x = []
y = []
z = []

for row in data:
    try:
        x.append(float(row[0]))
        y.append(float(row[1]))
        z.append(float(row[2]))
    except Exception as e:
        pass
        #print e

X, Y = np.meshgrid(x, y)        # (I don't understand why is this required)

# creating a 2D array of z whose leading diagonal elements
# are the z values from the data set and the off-diagonal
# elements are 0, as I don't care about them.
z_2d = []
default = 0
for i, no in enumerate(z):
    z_temp = []
    for j in xrange(i): z_temp.append(default)
    z_temp.append(no)
    for j in xrange(i+1,  len(x)): z_temp.append(default)
    z_2d.append(z_temp)
Z = z_2d

CS = plt.contour(X, Y, Z, list(set(z)))
plt.figure()
CB = plt.colorbar(CS, shrink=0.8, extend='both')
plt.show()

Вот график небольшой выборки данных - enter image description here

Вот подробный взгляд на одну из областей вышеприведенного графика (обратите внимание на перекрывающиеся / пересекающиеся линии) - enter image description here

Не понимаю, почему это не похоже на контурный сюжет. Линии пересекаются, чего не должно быть. Что может быть не так? Пожалуйста помоги.

5
задан Pushpak Dagade 26 February 2012 в 12:12
поделиться